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 回答