我不知道之前是否提出这个问题。我在搜索中找不到它。
System.out.println(1.00 - 9*.10);
以上语句打印出0.09999999999999998
而不是简单地0.01
我知道这是JAVA中一个众所周知的问题,但我想知道它为什么会这样。有人可以引导我查看float
的实施细节并解释原因。
答案 0 :(得分:1)
这不是java的问题,它是浮点数和双精度数在几乎所有语言和每个处理器上存储和处理的基本问题。
由于它存储数字的方式不能(除非在极少数情况下)存储数字。
可在此处找到有关原因的完整说明:http://en.wikipedia.org/wiki/Single-precision_floating-point_format
你可以使用诸如BigDecimal
之类的东西来存储任何精确的数字而不会出现这个问题,但是它会运行得慢得多,所以你需要权衡精确度和性能。