小数点がある数値を含む計算を行った際に、計算結果が合わないという事が起きます。
理由としては、JavaScriptの演算はIEEE 754という規格に従って実装されているという事。
仕様であり、JavaScript的には正しい値なので避けようがありません。
ちなみに、以下のような演算でも誤差が起きます。
(17.955 * 100000) = 1795499.9999999998
原理や理屈は「演算誤差」などで調べてもらうとして、利用するソフトウェアによっては発生しうる現象です。
今回のケースでは、金額の計算だったため、コンピューターの都合による誤差は認められません。。。。
対処法
「いったん整数に変換してから演算して戻す」などがよくありがちですが、JavaScriptだとそこそこの行数でロジックを書かなければだめそうなので
こちらは別途纏めたいと思います。
追伸
net framework(vb.net)でも同じ結果となりました。こちらは、小数点の値に対して、[Decimal]を明示する事で対処できそうです。(Convert.ToDecimal(17.955) * 100000) = 179500D
Javaでも起きますね。こちらはBigDecimal型を使って計算すれば対処できます。
0 件のコメント:
コメントを投稿