【发布时间】:2011-08-01 18:39:19
【问题描述】:
可能的重复:
Is JavaScript's Math broken?
Java floating point arithmetic
我有当前代码
for(double j = .01; j <= .17; j+=.01){
System.out.println(j);
}
输出是:
0.01
0.02
0.03
0.04
0.05
0.060000000000000005
0.07
0.08
0.09
0.09999999999999999
0.10999999999999999
0.11999999999999998
0.12999999999999998
0.13999999999999999
0.15
0.16
0.17
有人可以解释为什么会这样吗?你如何解决这个问题?除了写取整函数?
【问题讨论】:
-
@JW:这是一个非常有用的链接,考虑到它回答的(类似)问题的数量以及它完整、正确、简短易读的事实。非常感谢。
-
@matt:我希望人们停止发布该链接。这不是一个很好的参考,除非你想读一本小书只是为了了解浮点数是如何工作的(真的没那么复杂!)
-
@BlueRaja 我不同意,我认为这是一个很好的参考,表明浮点数学是一个非常复杂的野兽,它比将十进制数字相加复杂得多