有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

假的


共 (2) 个答案

  1. # 1 楼答案

    计算机将浮点数表示为2幂的整数倍0.1不能精确地表示为浮点数(同样,不能用十进制写1/3),因此会出现舍入错误。避免这种情况的最好方法是在可能的情况下使用整数类型,在不可能的情况下使用容错比较函数。除非您知道自己在做什么,否则不要比较浮点数是否精确相等

  2. # 2 楼答案

    这个例子说明计算机中的浮点运算是不精确的。变量值实际上取决于变量中存储的数字。有些误差较大,有些误差较小,但无论哪种方法,都不能像数学规则中那样假设值是精确的