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等のライブラリを使えば誤差が生じません。

コメント

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