java中浮点数判断是否相等

浮点数判断是否相等

前言

首先简单提一下== 和equals :
== 的作用:
  基本类型:比较值是否相等
  引用类型:比较内存地址值是否相等
equals 的作用:
  引用类型:默认情况下,比较内存地址值是否相等。可以按照需求逻辑,重写对象的equals方法。

问题

这里就有一个容易让人产生误解的地方了.
java基本类型:byte,short,char,int,long,float,double,boolean
这其中包含了 float , 和double , 两个浮点类型的,这两种类型是不能用 == 来判断是否相等的, 其中有一个精度的问题.
如下:

        Double a = 1.234567d;
        Double b = 1.234567d;
        if(a==b){
             System.out.println("==");
		}

运行会发现a 和 b 是不相等的.

解决

浮点型的不能用 == 判断如何解决呢?

两个浮点数比较可以通过相减并与预先设定的精度比较,记得要取绝对值

示例:

        Double a = 1.234567d;
        Double b = 1.234569d;
        double precision = 0.000001d;
        if(Math.abs(a-b)<precision){
            System.out.println("==");
        }else{
            System.out.println("不等");
        }

如上精度设置为:0.000001
如果判断误差在这个精度内,就认为相等.

发布了132 篇原创文章 · 获赞 108 · 访问量 27万+

猜你喜欢

转载自blog.csdn.net/fanbaodan/article/details/103197746