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