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等のライブラリを使えば誤差が生じません。
KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
コメント
// (反証)この誤差を見えなくするだけ
console.log(34.33 * 100);// 3433となる。逆に100を10の累乗とすると見えてない誤差が現れる
console.log(34.33 * 10 * 10);// 3432.9999999999995となるから、整数にする計算に小数点を使ってしまってはやはりだめでしょ^^