javascript 小数の計算結果がおかしくなる

javascript 小数の計算結果がおかしくなる

javascriptで、少数の計算を行うと結果がおかしくなることが多いので、正しく計算するサンプルコードを記述してます。

環境

  • OS windows10 pro 64bit
  • Apache 2.4.43
  • ブラウザ chrome 103.0.5060.114

小数の計算

例えば、「0.1 + 0.1」であれば正しい結果になりますが、

console.log(0.1 + 0.1); // 0.2

「0.1 + 0.1 + 0.1」になると、以下の結果のように正しく計算されません。

console.log(0.1 + 0.1 + 0.1); // 0.30000000000000004

console.log(1 - 0.9); // 0.09999999999999998

これは、javascriptのIEEE 754(浮動小数点数演算標準) という規格により起こる問題で、10のn倍して整数に戻して計算すれば大抵改善されますが、ここでも問題が発生します。

console.log(77.99 * 100); // 7798.999999999999

問題を解消するには、以下のように整数部と小数部に分けて、整数への変換を行う必要があります。

console.log(77 * 100 + 0.99 * 100);

実際に、「 77.99 – 0.9 」の計算を行には、以下のようにする必要があります。

console.log(77.99 - 0.9); // 77.08999999999999

console.log((77 * 100 + 0.99 * 100 - 0.9 * 100) / 100); // 77.09