JavaScriptの浮動小数点数型の誤差をなくす

JavaScriptの浮動小数点数型の誤差をなくす

JavaScriptの浮動小数点数型の計算をすると誤差が生じます。

以下計算をしてみます。

let a = 1051.8;
console.log(a / 10);// 105.17999999999999となってしまう

これは正確には仕様どおりの動作となります。IEEE_754参考

この誤差をなくすには、浮動小数点を10の累乗をかけて整数にしてから計算し、最後に10の累乗で割って浮動小数点数型に戻す、という方法があります。

10の累乗をかけるので、100を掛けたい場合は、10*10とします。(10の累乗とする)

console.log(34.3 * 100);// 3429.9999999999995となってしまう
console.log(34.3 * 10 * 10);// 3430となる

もしくはBigDecimal.js、math.js等のライブラリを使えば誤差が生じません。

コメント

  1. 通りすがり より:

    // (反証)この誤差を見えなくするだけ
    console.log(34.33 * 100);// 3433となる。逆に100を10の累乗とすると見えてない誤差が現れる
    console.log(34.33 * 10 * 10);// 3432.9999999999995となるから、整数にする計算に小数点を使ってしまってはやはりだめでしょ^^

株式会社CONFRAGE ITソリューション事業部をもっと見る

今すぐ購読し、続きを読んで、すべてのアーカイブにアクセスしましょう。

続きを読む

タイトルとURLをコピーしました