浮点运算JAVA中的值不一致

时间:2013-12-20 12:34:11

标签: java floating-point floating-accuracy floating-point-precision

我不知道之前是否提出这个问题。我在搜索中找不到它。

System.out.println(1.00 - 9*.10);

以上语句打印出0.09999999999999998而不是简单地0.01

我知道这是JAVA中一个众所周知的问题,但我想知道它为什么会这样。有人可以引导我查看float的实施细节并解释原因。

1 个答案:

答案 0 :(得分:1)

这不是java的问题,它是浮点数和双精度数在几乎所有语言和每个处理器上存储和处理的基本问题。

由于它存储数字的方式不能(除非在极少数情况下)存储数字。

可在此处找到有关原因的完整说明:http://en.wikipedia.org/wiki/Single-precision_floating-point_format

你可以使用诸如BigDecimal之类的东西来存储任何精确的数字而不会出现这个问题,但是它会运行得慢得多,所以你需要权衡精确度和性能。