我在我的 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)