カテゴリ: JavaScript 更新日: 2025/11/29

JavaScriptの小数点計算での注意点と対策まとめ

JavaScriptの小数点計算での注意点と対策まとめ
JavaScriptの小数点計算での注意点と対策まとめ

先生と生徒の会話形式で理解しよう

生徒

「先生、JavaScriptで0.1と0.2を足したら、0.3にならないんですけど…なんでですか?」

先生

「とても良い疑問ですね。実はJavaScriptでは、小数点を扱うときにちょっとしたクセがあるんです。これは『浮動小数点数(ふどうしょうすうてんすう)』という仕組みのせいなんですよ。」

生徒

「浮動小数点数?それって何ですか?」

先生

「簡単に言うと、コンピューターは小数を正確に表現できないことがあるんです。では、具体的な例を見ながら詳しく学んでいきましょう!」

1. JavaScriptで小数点計算がズレる理由

1. JavaScriptで小数点計算がズレる理由
1. JavaScriptで小数点計算がズレる理由

JavaScriptでは、数値はすべて「64ビット浮動小数点数」という形式で扱われます。これは国際的な規格(IEEE754)に基づいたもので、コンピューター内部では2進数(0と1)で小数を表しています。

しかし、2進数では「0.1」や「0.2」のような小数を正確に表せないことがあります。そのため、計算の結果にわずかな誤差が出てしまうのです。

たとえば、次のように書くとどうなるでしょうか。


console.log(0.1 + 0.2);

0.30000000000000004

このように、0.1 + 0.2 が 0.30000000000000004 という中途半端な結果になってしまいます。これはJavaScriptが悪いわけではなく、コンピューター全体の仕組み上の問題なのです。

2. なぜ「0.1」や「0.2」を正確に表せないの?

2. なぜ「0.1」や「0.2」を正確に表せないの?
2. なぜ「0.1」や「0.2」を正確に表せないの?

2進数では、10進数の「0.1」は無限に続く小数になってしまいます。たとえば、10進数の「1/3」を書くと「0.3333...」と終わらないのと同じように、2進数で「0.1」を表すと無限に続いてしまうのです。

コンピューターはそれを途中で打ち切って保存するため、ほんの少しだけ誤差が生まれてしまいます。

3. 小数点の誤差を確認してみよう

3. 小数点の誤差を確認してみよう
3. 小数点の誤差を確認してみよう

実際にいくつかの計算を試してみると、どのように誤差が発生するかがよくわかります。


console.log(0.1 + 0.2); // ?
console.log(0.3 === 0.1 + 0.2); // 比較してみよう

0.30000000000000004
false

この結果からわかるように、0.3 === 0.1 + 0.2false(偽)になります。つまり、見た目は同じ0.3でも、内部では違う数値として扱われているのです。

4. 小数点誤差を防ぐ方法①:toFixed()を使う

4. 小数点誤差を防ぐ方法①:toFixed()を使う
4. 小数点誤差を防ぐ方法①:toFixed()を使う

toFixed()メソッドを使うと、小数点以下の桁数を指定して四捨五入した文字列として出力できます。見た目を整えたいときに便利です。


let result = 0.1 + 0.2;
console.log(result.toFixed(2));

0.30

ただし、注意点としてtoFixed()の結果は「文字列(string)」になるため、そのまま計算には使えません。必要な場合はNumber()関数で数値に戻します。


let num = Number((0.1 + 0.2).toFixed(2));
console.log(num);

0.3

5. 小数点誤差を防ぐ方法②:整数に変換して計算する

5. 小数点誤差を防ぐ方法②:整数に変換して計算する
5. 小数点誤差を防ぐ方法②:整数に変換して計算する

もう一つの方法は、小数を一時的に整数に変換して計算する方法です。たとえば、0.1を10倍して1にしてから計算し、最後に10で割るやり方です。


let result = (0.1 * 10 + 0.2 * 10) / 10;
console.log(result);

0.3

この方法なら、計算の途中で誤差が出にくくなります。金額やスコアなど、正確な数値が必要なときによく使われるテクニックです。

6. 小数点誤差を防ぐ方法③:Math.round()を活用する

6. 小数点誤差を防ぐ方法③:Math.round()を活用する
6. 小数点誤差を防ぐ方法③:Math.round()を活用する

Math.round()は四捨五入をする関数です。小数点の計算結果を丸めることで、誤差を目立たなくできます。


let result = Math.round((0.1 + 0.2) * 100) / 100;
console.log(result);

0.3

このように、小数のまま計算するのではなく、途中で整数に変換してから丸めることで、より安定した結果を得られます。

7. 実際の開発での注意点

7. 実際の開発での注意点
7. 実際の開発での注意点

実際のプログラムでは、商品の価格計算や税率計算などで小数点を扱うことが多くあります。そうしたときは、以下のような対策を心がけましょう。

  • 金額割合は整数(例:1円単位や100倍)にしてから計算する
  • 最終的な出力toFixed()Math.round()を使って丸める
  • 厳密な精度が必要な場合は「Big.js」や「Decimal.js」などの外部ライブラリを使う

これらを意識することで、予期せぬ誤差や不具合を防ぐことができます。

8. まとめ:小数点計算は「誤差が出る前提」で考える

8. まとめ:小数点計算は「誤差が出る前提」で考える
8. まとめ:小数点計算は「誤差が出る前提」で考える

JavaScriptの小数点計算は、コンピューターの仕組み上どうしても誤差が出てしまいます。大事なのは、誤差が出ることを理解して、その上で正しい対処をすることです。

この記事で紹介した方法を覚えておけば、数値計算のトラブルを未然に防ぐことができるでしょう。

カテゴリの一覧へ
新着記事
New1
TypeScript
TypeScriptでパスエイリアスを設定する方法!baseUrlとpathsでコードをスッキリ整理
New2
JavaScript
JavaScriptのfor文の書き方を初心者向けにやさしく解説
New3
JavaScript
JavaScriptの関数でよくあるエラーとその解決法まとめ
New4
JavaScript
JavaScriptのイベント処理でよくあるエラーとその対処法
人気記事
No.1
Java&Spring記事人気No1
JavaScript
JavaScriptのインストール方法まとめ!Windows・Mac・Linux別にステップ解説
No.2
Java&Spring記事人気No2
JavaScript
JavaScriptのマウスイベントの使い方(click, mouseoverなど)
No.3
Java&Spring記事人気No3
JavaScript
JavaScriptのtoStringとString関数の違いを初心者向けに解説
No.4
Java&Spring記事人気No4
JavaScript
JavaScriptの純粋関数(pure function)と副作用の違いを理解しよう
No.5
Java&Spring記事人気No5
JavaScript
JavaScriptプログラムの実行方法まとめ!ブラウザ・Node.js・コンソールの使い方
No.6
Java&Spring記事人気No6
JavaScript
JavaScriptで文字列をforループで1文字ずつ処理する方法!初心者向け解説
No.7
Java&Spring記事人気No7
TypeScript
TypeScriptの始め方:開発環境の構築手順【初心者向け】
No.8
Java&Spring記事人気No8
JavaScript
JavaScriptのDOMContentLoadedとloadイベントの違いを理解しよう