ほとんどの言語は浮動小数点数を扱うときに精度の問題に遭遇しますが、JS では特に深刻なようです
alert(45.6*13); 結果は実際には 592.800000000001 です。もちろん加算なども可能です
これはjsのエラーでしょうか?
もちろんそうではありません。コンピューターは正しい 2 進浮動小数点演算を行っていますが、問題は 10 進数を入力し、コンピューターが 2 進数で動作するということです。この 2 つの変換は常にうまく行われるわけではなく、正しい結果が得られる場合もあります。 , しかし、時にはそれほど幸運ではないこともあります
alert(0.7+0.1);//0.7999999999999999 を出力
alert(0.6+0.2);//0.8 を出力
しかし、一般的な損失は乗算と除算の演算で多くなることが多く、JS では単純な加算と減算でもこの種の問題が発生します。ご覧のとおり、この誤差も非常に小さいです。はい、しかし表示されないはずです
それではどうやって解決するのでしょうか? ECMA4 が解決策を提供しているようですが、今はあまり現実的ではありません
1 つの方法、たとえば 0.7+0.1 にまず 0.1 と 0.7 を 10 掛けて、After を加算します。それを 10 で割ります
さらに、この問題を解決する関数をいくつか作成できます。Baidu や Google にはたくさんあるはずですが、複雑な浮動小数点演算を行うために JS を使用しないのが最善です。これはもっと便利です
rreee
以上がJS浮動小数点数の精度問題を解く方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。