0

FireFox と Chrome コンソールの両方で次の式を試しました。

17.99 * 100;

期待される結果: 1799

実際の結果: 1798.9999999999998

私も試しました:

parseInt(17.99 * 100);

期待される結果: 1799

実際の結果: 1798

なぜこれが起こっているのですか?どうすれば期待される結果を得ることができますか?

4

2 に答える 2

1

浮動小数点演算は正確な科学ではありません。その理由は、メモリでは、精度がバイナリ (すべて 2 のべき乗) で格納されるためです。正確な 2 の累乗で表すことができない場合は、精度が失われる可能性があります。

あなたの数値1798.9999999999998は、乗算で切り上げられないほど精度が失われていました。

http://en.wikipedia.org/wiki/IEEE_floating_point

于 2014-02-21T17:03:08.623 に答える
0

これを試して:

Math.round(17.99*100)

前の回答で説明したように、浮動小数点数の乗算は正確な科学ではありません。できることは、特定の精度範囲で結果を期待することです。Number.prototype.toPrecision() を見てください。

(17.99*100).toPrecision(4)
于 2014-02-21T17:05:55.630 に答える