Java中如何判断两个浮点数是否相等

一:结论:获取两个浮点数差值的绝对值,然后在某个精度范围内判断。

二:Why?

因为java底层存储浮点数类型的数据:是获取到一个接近这个浮点数的近似值进行存储的。
如下代码展示:
1.假设 8.1 / 3 = 2.7,然后将 2.7 赋值给变量 b。显然想法是错误的。
2.java底层并不是拿 8.1 / 3 的。而是拿着一个接近 8.1 的数值,进行计算。
8.1 有可能在底层是 8.000000091.

 double b = 8.1 / 3;
 System.out.println(b);      // 2.6999999999999997

三:错误示范

 		double a = 2.7;
        /**
         * 因为计算机存储的小数都是近似值,带有精度的。
         * 比如这里:我们看到的是 8.1 这个数,但是计算机在存储 8.1这个数的时候,要考虑到精度,
         * 所以有可能存储在底层的 8.1 这个数就是接近 8.1 这个数的值。比如:8.100000002
         * 那么计算机在拿 8.100000002 / 3 的时候,也就会出现像程序运行结果一样的数。
         */
        double b = 8.1 / 3;

        System.out.println(a);      // 2.7
        System.out.println(b);      // 2.6999999999999997
        /**
         * 出于 浮点数在计算机底层存储的有可能不是我们肉眼所看到的这个数 的细节:
         * 所以我们在判断浮点数是否相等的时候,不能直接判断这两个数是否相等
         * (也就是不能在程序中使用 == 进行浮点数的判断)
         */
        // 这样的比较方式是错误的。
        if (a == b) {
            System.out.println("相等");
        } else {
            System.out.println("不相等");
        }

四:正确示范

        /**
         * 那如何比较两个浮点数是否相等呢?
         * 1.先获取到 2 个浮点数的差值
         * 2.然后对这个 差值 取绝对值
         * 3.最后根据给出的范围判断这两个数是否相等.(在本次测试中,这个范围是随便给出来的!)
         *
         */
        double a = 2.7;
        double b = 8.1 / 3;
        System.out.println(a - b);     
        // 4.440892098500626E-16(科学计数法:也就是这个数 / 10的16次方,小数点向左移动16位)
        if (Math.abs(a - b) < 0.000000002) {
            // 如果两个浮点数差值的绝对值小于这个范围(0.000000002),那么这两个数就是相等的
            System.out.println("相等");
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值