3

可能的重复:
JavaScript 的浮点数学被破坏了吗?

注意 - 我已经阅读了 parseFloat() 上的其他帖子,但我没有找到一个很好的解释来解释为什么会出现问题。(或者我只是不明白)。

这段代码...

var sum = parseFloat("1.001") + parseFloat(".001");

alert(parseFloat(sum));​

输出...

1.0019999999999998

我读过添加sum.toFixed(2)将仅包含 2 个小数点。

但是,我不是 100% 理解为什么会出现这种长小数。

是否以二进制parseFloat(sum)表示?sum如果是这样,那么 1.001 不能用二进制表示,因为 1/2^x + ... 永远不能完全等于 .001 或 1/1000?

4

1 回答 1

2

这不是特定于 Javascript,而是IEEE 浮点数在内部的表示方式会导致精度错误。

我不会在这里复制内容,但是有很多资源可以帮助解释您的示例中发生了什么。

这是一个:http ://www.petebecker.com/js/js200006.html

于 2012-12-08T03:56:09.130 回答