浮点数表示,Java示例

你能解释一下,为什么我得到下一个结果:

当我运行这个:

System.out.println((0.2 - 0.1)); 

我得到了:0.1

当我运行这个:

 System.out.println((0.3 - 0.2)); 

我得到了:0.09999999999999998

我知道数字“0.1”在二进制中没有有限的表示,但它没有解释上面的结果。 这很可能不是关于特定语言,而是关于数字如何存储在计算机中。

Java使用IEEE浮点来表示double值。 它不是一个精确的表示,有些计算会导致以这种方式表现出来的微小错误。

我同意上面的波希米亚语( floatdouble精度值不精确)所以你会得到这样的奇怪之处

但是你的问题有一个解决方案:

 NumberFormat nf = NumberFormat.getInstance(); nf.setMaximumFractionDigits(1); nf.format(0.3f - 0.2f); 

这将产生0.1