2021_2_18_浮点数拓展

时间:2021-02-19 13:49:06   收藏:0   阅读:0

浮点数中的常见问题

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 (数学工具类)

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!