你能解释一下,为什么我得到了下一个结果:
当我运行以下命令时:
System.out.println((0.2 - 0.1));我得到: 0.1
当我运行以下命令时:
System.out.println((0.3 - 0.2));我得到: 0.09999999999999998
我知道数字"0.1“没有二进制的有限表示,但它不能解释上面的结果。这很可能不是关于特定的语言,而是关于数字在计算机中的存储方式。
发布于 2013-12-09 20:10:19
Java使用IEEE floating point来表示double值。这不是一个精确的表示,并且一些计算会导致微小的误差,这些误差以这种方式表现出来。
发布于 2013-12-09 20:12:36
我同意上面的波西米亚(float和double并不精确),所以你会得到像这样的奇怪的东西
但是你的问题有一个解决方案:
NumberFormat nf = NumberFormat.getInstance();
nf.setMaximumFractionDigits(1);
nf.format(0.3f - 0.2f);这将生成0.1。
https://stackoverflow.com/questions/20470114
复制相似问题