2021_2_18_浮点数拓展

浮点数中的常见问题

public class FloatAndDouble {
    public static void main(String[] args) {
        float num1 = 0.1F;
        double num2 = 1.0/10;

        System.out.println(num1);
        System.out.println(num2);
        System.out.println(num1 == num2); //输出判断num1是否等于num2
    }
}

//        0.1
//        0.1
//        false

这段程序中看出相同数值的float和double被判断为不相等

另外,

public class FloatAndDouble {
    public static void main(String[] args) {
        float num1 = 1312341312314123123F;
        double num2 = num1 + 1;

        System.out.println(num1);
        System.out.println(num2);
        System.out.println(num1 == num2); //输出判断num1是否等于num2
    }
}

//        1.31234134E18
//        1.31234134478553088E18
//        true

而在这段程序中明显不同的num1和num2竟然被判断为相等。

那么,这是为什么呢?

因为float浮点数类型对小数的表达式有限、离散、近似的。因此,它的值有舍入误差,是一个大约的,接近真实数值却不等于真实值的值。

因此,最好完全避免使用浮点数进行比较。(比大小,判断是否相等)

在需要比较小数数值时,可以使用类BigDecimal (数学工具类)

posted @ 2021-02-18 18:34  cutomorrow  阅读(68)  评论(0)    收藏  举报