0

重複の可能性:
JavaScriptの数学は壊れていますか?

理由に関するアイデア:

(872.23 + 2315.66 + 4361.16) == 7549.05

Javascriptコンソール(Chrome Developerコンソールなど)でfalseを返しますか?

電卓で試してみると、左側は正確に7549.05 ...ですが、Javascriptでは7549.049999999999と表示されます。私はそれを「修正」するか、丸めることができます、または...しかし、なぜ私は単純な追加のためにそれをする必要がありますか?

ありがとう

4

4 に答える 4

1

That is not Javascript adding extra precision, that is your computer's floating-point representation not being able to accurately represent your number. Get around it by using rational numbers or fixed-point (instead of floating-point) arithmetic.

于 2012-06-26T19:16:15.077 に答える
1

小数を使用することで、浮動小数点数を使用しています。浮動小数点がバイナリ形式でどのように表現されるか、および浮動小数点数を加算しても必ずしも希望どおりに解決されない理由を理解するには、バイナリ浮動小数点加算がどのように機能するかについて少し知っておく必要があります。

以下は、一目でわかる簡単な Google の結果です: The Complete Javascript Number Reference

また、浮動小数点がバイナリでどのように表現されるかを知りたい場合は、ウィキペディアのIEEE 浮動小数点を参照してください。

この場合の最善の策は、丸めることです。

于 2012-06-26T19:18:29.030 に答える
1

これは、浮動小数点がハードウェアでどのように表現されるかによるものです (おそらく 32 ビットですが、どのビット数でも同じです)。基本的に問題は、「7549.05」のようなものを正確に表現できないことです (この問題の詳細についてはwikipediaを参照)。

したがって、実際の使用では、数値が通貨である場合、適切なオプションは 100 を掛けて常に整数になり、int で操作することです (これにより、加算、減算、または乗算時に良い結果が得られます)。

于 2012-06-26T19:19:03.450 に答える
1

マルコ・マリアーニは少し前に同様の質問に答えました:

すべてのコンピューター科学者が浮動小数点演算について知っておくべきこと

そして、より短い、より要点:

http://floating-point-gui.de/

于 2012-06-26T19:19:19.467 に答える