浮点数表示,Java示例
你能解释一下,为什么我得到下一个结果:
当我运行这个:
System.out.println((0.2 - 0.1));
我得到了:0.1
当我运行这个:
System.out.println((0.3 - 0.2));
我得到了:0.09999999999999998
我知道数字“0.1”在二进制中没有有限的表示,但它没有解释上面的结果。 这很可能不是关于特定语言,而是关于数字如何存储在计算机中。
Java使用IEEE浮点来表示double
值。 它不是一个精确的表示,有些计算会导致以这种方式表现出来的微小错误。
我同意上面的波希米亚语( float
和double
精度值不精确)所以你会得到这样的奇怪之处
但是你的问题有一个解决方案:
NumberFormat nf = NumberFormat.getInstance(); nf.setMaximumFractionDigits(1); nf.format(0.3f - 0.2f);
这将产生0.1
。