浮点数表示,Java示例

时间:2013-12-09 12:00:16

标签: java floating-point numbers

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

当我运行时:

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

我得到了:0.1

当我运行时:

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

我得到:0.09999999999999998

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

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

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

这将产生0.1