JavaScriptを用いたプログラミングにおいて、数値計算は避けては通れない基礎中の基礎といえる要素です。
アプリケーションのロジック構築から、アニメーションの制御、データの集計処理に至るまで、四則演算はあらゆる場面で活用されています。
しかし、JavaScript特有の計算ルールや数値の保持形式を正しく理解していないと、思わぬバグや計算ミスを引き起こす原因となります。
本記事では、JavaScriptにおける四則演算の基本ルールから、実務で注意すべき計算精度の問題、そして2026年現在の開発現場で求められるベストプラクティスまでを詳しく解説します。
基本的な四則演算子
JavaScriptで数値を計算するためには、算術演算子と呼ばれる記号を使用します。
最も頻繁に利用されるのは、加算(+)、減算(-)、乗算(*)、除算(/)の4種類です。
これらの演算子は、数値型のデータに対して直感的に使用することができます。
加算・減算・乗算・除算
まずは、基本的な4つの演算の書き方を確認しましょう。
以下のコードは、変数に対してそれぞれの演算を行った例です。
// 基本的な四則演算の例
const a = 10;
const b = 5;
const sum = a + b; // 加算
const difference = a - b; // 減算
const product = a * b; // 乗算
const quotient = a / b; // 除算
console.log(sum);
console.log(difference);
console.log(product);
console.log(quotient);
15
5
50
2
JavaScriptでは、整数の計算だけでなく小数を含む計算も同じ演算子で行うことが可能です。
除算において、他の言語では整数同士の計算結果が整数に切り捨てられることがありますが、JavaScriptでは結果が小数になる場合は自動的に小数として返されます。
剰余演算とべき乗演算
四則演算に加えて、プログラミングで頻用されるのが剰余(%)とべき乗(**)です。
剰余演算子は、割り算をしたときの「余り」を求めるために使用されます。
べき乗演算子は、数値を特定の回数だけ掛け合わせる計算に使用します。
// 剰余とべき乗の例
const remainder = 10 % 3; // 10を3で割った余り
const power = 2 ** 3; // 2の3乗(2 * 2 * 2)
console.log(remainder);
console.log(power);
1
8
剰余演算は、偶数・奇数の判定や、配列の要素をループさせる際のインデックス制御に非常に役立ちます。
演算の優先順位と括弧の活用
複数の演算子を一つの式で組み合わせる場合、計算される順番には決まったルールがあります。
数学のルールと同様に、乗算・除算・剰余・べき乗は、加算・減算よりも優先的に計算されます。
以下のコードで、優先順位による結果の違いを確認してください。
// 演算の優先順位
const result1 = 10 + 5 * 2; // 5 * 2 が先に計算される
const result2 = (10 + 5) * 2; // 括弧内が先に計算される
console.log(result1);
console.log(result2);
20
30
意図した計算結果を得るためには、優先的に計算したい箇所を必ず丸括弧 () で囲むようにしてください。
複雑な式を書く際は、優先順位が明確であっても、読みやすさを向上させるために括弧を使用することが推奨されます。
注意すべき計算ミスとJavaScriptの特性
JavaScriptの計算において、初心者が最も陥りやすい罠がいくつか存在します。
これらはプログラムの停止を招くことは少ないものの、計算結果が微妙にズレるという厄介なバグを引き起こします。
浮動小数点数による誤差
JavaScriptは、すべての数値を「64ビット浮動小数点数」として扱います(IEEE 754規格)。
この形式の影響で、0.1 + 0.2 が正確に 0.3 にならないという有名な問題が発生します。
// 小数計算の誤差
const result = 0.1 + 0.2;
console.log(result);
console.log(result === 0.3);
0.30000000000000004
false
このように、コンピューターは小数を2進数で処理するため、無限小数の切り捨てが発生し、微小な誤差が生じます。
金額計算などの厳密な精度が求められる場面では、一度数値を100倍して整数にしてから計算し、最後に100で割るといった工夫が必要です。
また、誤差を許容して比較を行う場合には、Number.EPSILON を利用して比較を行う手法が一般的です。
暗黙の型変換による予期せぬ結果
JavaScriptは動的型付け言語であり、計算時にデータ型を自動的に変換しようとします。
特に加算演算子(+)は、数値の加算だけでなく「文字列の結合」にも使われるため注意が必要です。
// 型変換によるバグの例
const val1 = "10";
const val2 = 5;
console.log(val1 + val2); // 文字列として結合される
console.log(val1 - val2); // 数値として計算される
105
5
加算の場合、一方が文字列であればもう一方も文字列に変換されて結合されます。
一方で、減算・乗算・除算では、文字列が数値に変換されてから計算が行われます。
このような混乱を避けるため、計算を行う前には必ず Number() 関数などで明示的に数値型へ変換する習慣をつけましょう。
高度な数値計算と便利な機能
近年のJavaScript(ES2020以降)では、従来の数値型の限界を超えた計算をサポートする機能も追加されています。
BigIntによる巨大な整数の扱い
JavaScriptの通常の数値型(Number)で正確に扱える整数の最大値は、Number.MAX_SAFE_INTEGER(2の53乗マイナス1)までです。
これを超える巨大な整数を扱う場合は、BigInt 型を使用します。
// BigIntの使用例
const bigNum = 9007199254740991n; // 数値の末尾に n をつける
const result = bigNum + 1n;
console.log(result);
9007199254740992n
ただし、BigInt と通常の Number を混ぜて計算することはできません。
計算を行う際は、どちらかの型に統一する必要があります。
Mathオブジェクトの活用
四則演算だけでは難しい高度な計算には、標準で用意されている Math オブジェクトを利用します。
四捨五入、切り捨て、最大値の取得など、頻繁に使用するメソッドが揃っています。
| メソッド名 | 役割 | 例 |
|---|---|---|
Math.round() | 四捨五入 | Math.round(4.5) → 5 |
Math.floor() | 切り捨て | Math.floor(4.9) → 4 |
Math.ceil() | 切り上げ | Math.ceil(4.1) → 5 |
Math.abs() | 絶対値 | Math.abs(-10) → 10 |
Math.random() | 0以上1未満の乱数 | Math.random() |
これらのメソッドを組み合わせることで、複雑な数学的ロジックも簡潔に記述できるようになります。
まとめ
JavaScriptにおける四則演算は、シンプルに見えて奥が深いテーマです。
基本的な演算子の使い方だけでなく、浮動小数点数による誤差の発生機序や、暗黙の型変換による副作用を理解することが重要です。
正確な計算が求められるシステム開発では、数値型の変換を明示的に行い、必要に応じて BigInt や Math オブジェクトを適切に選択してください。
これら基礎知識をしっかりと身につけることで、2026年以降のより高度なプログラミングにおいても、堅牢で信頼性の高いコードを書くことができるようになります。
まずは日々のコードの中で、数値の型と計算順序を意識することから始めてみましょう。
