FireFox と Chrome コンソールの両方で次の式を試しました。
17.99 * 100;
期待される結果: 1799
実際の結果: 1798.9999999999998
私も試しました:
parseInt(17.99 * 100);
期待される結果: 1799
実際の結果: 1798
なぜこれが起こっているのですか?どうすれば期待される結果を得ることができますか?
FireFox と Chrome コンソールの両方で次の式を試しました。
17.99 * 100;
期待される結果: 1799
実際の結果: 1798.9999999999998
私も試しました:
parseInt(17.99 * 100);
期待される結果: 1799
実際の結果: 1798
なぜこれが起こっているのですか?どうすれば期待される結果を得ることができますか?
浮動小数点演算は正確な科学ではありません。その理由は、メモリでは、精度がバイナリ (すべて 2 のべき乗) で格納されるためです。正確な 2 の累乗で表すことができない場合は、精度が失われる可能性があります。
あなたの数値1798.9999999999998
は、乗算で切り上げられないほど精度が失われていました。
これを試して:
Math.round(17.99*100)
前の回答で説明したように、浮動小数点数の乗算は正確な科学ではありません。できることは、特定の精度範囲で結果を期待することです。Number.prototype.toPrecision() を見てください。
(17.99*100).toPrecision(4)