java舍入误差近似
Possible Duplicate:
Java floating point arithmetic
大家好, 我刚刚读了一本书,遇到了这个例子,它给出了不同的结果。谁能给我解释一下原因吗
public class Test {
public static void main(String[] args) {
double x = 0.3 - 0.2;
double y = 0.2 - 0.1;
System.out.println(x);
System.out.println(y);
System.out.println(y == x);
}
}
输出为: 0.09999999998
0.1
假的
# 1 楼答案
计算机将浮点数表示为
2
幂的整数倍0.1
不能精确地表示为浮点数(同样,不能用十进制写1/3
),因此会出现舍入错误。避免这种情况的最好方法是在可能的情况下使用整数类型,在不可能的情况下使用容错比较函数。除非您知道自己在做什么,否则不要比较浮点数是否精确相等# 2 楼答案
这个例子说明计算机中的浮点运算是不精确的。变量值实际上取决于变量中存储的数字。有些误差较大,有些误差较小,但无论哪种方法,都不能像数学规则中那样假设值是精确的