ホームページ  >  記事  >  ウェブフロントエンド  >  JS浮動小数点数の精度問題を解く方法

JS浮動小数点数の精度問題を解く方法

一个新手
一个新手オリジナル
2017-09-25 10:34:061642ブラウズ

ほとんどの言語は浮動小数点数を扱うときに精度の問題に遭遇しますが、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 を出力

2 つの 10 進数を入力し、2 進数に変換してから変換します。変換プロセス中に当然損失が発生します

しかし、一般的な損失は乗算と除算の演算で多くなることが多く、JS では単純な加算と減算でもこの種の問題が発生します。ご覧のとおり、この誤差も非常に小さいです。はい、しかし表示されないはずです
それではどうやって解決するのでしょうか? ECMA4 が解決策を提供しているようですが、今はあまり現実的ではありません
1 つの方法、たとえば 0.7+0.1 にまず 0.1 と 0.7 を 10 掛けて、After を加算します。それを 10 で割ります
さらに、この問題を解決する関数をいくつか作成できます。Baidu や Google にはたくさんあるはずですが、複雑な浮動小数点演算を行うために JS を使用しないのが最善です。これはもっと便利です
rreee

以上がJS浮動小数点数の精度問題を解く方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。