浮点数表示法,Java示例

浮点数表示法,Java示例,java,floating-point,numbers,Java,Floating Point,Numbers,请你解释一下,为什么我会得到下一个结果: 当我运行此命令时: System.out.println((0.2 - 0.1)); 我得到:0.1分 当我运行此命令时: System.out.println((0.3 - 0.2)); 我得到:0.0999999998 我知道数字“0.1”在二进制中没有有限表示,但它不能解释上面的结果。这很可能不是关于特定语言,而是关于数字在计算机中的存储方式。Java用来表示双值。这不是一个精确的表示,有些计算会导致微小的错误,以这种方式表现出来。我同意上面的

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

当我运行此命令时:

System.out.println((0.2 - 0.1));
我得到:0.1分

当我运行此命令时:

System.out.println((0.3 - 0.2));
我得到:0.0999999998


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

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

我同意上面的波希米亚式(
float
double
不精确),所以你会得到这样的奇怪结果

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

NumberFormat nf = NumberFormat.getInstance();
nf.setMaximumFractionDigits(1);
nf.format(0.3f - 0.2f);
这将产生
0.1

。从标题中删除“非理性”,因为术语“非理性数字”具有与问题无关的特定含义。