2012-12-08 39 views
2

可能重复:
Is JavaScript’s Floating-Point Math Broken?地理解JavaScript parseFloat行为

注意 - 我已经在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。

+0

感谢你的链接 –

回答

2

这不是特定于Javascript,而是内部代表IEEE Floating Point Numbers如何导致精度错误。

我不会重现这里的内容,但有一堆资源可以帮助解释你的例子中发生了什么。

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

+1

[“是什么每个程序员应该知道浮点”(http://floating-point-gui.de/) –