关于java:使用double和float进行不准确的计算

Inaccurate calculations using double and float

本问题已经有最佳答案,请猛点这里访问。

为什么这段代码给出的结果不准确?

1
2
3
4
double a = 0.3 + 0.3 + 0.3;
System.out.println(a);
float b = 0.3f + 0.3f + 0.3f;
System.out.println(b);

结果是

1
2
0.8999999999999999
0.90000004


在爪哇中,双值是IEEE浮点数。除非它们是2的幂(或2的幂之和,例如1/8+1/4=3/8),否则它们不能精确表示,即使它们具有高精度。一些浮点运算将复合这些浮点数中存在的舍入错误。在上面描述的情况下,浮点错误已经变得足够重要,足以显示在输出中。