浅谈Java中Double类型数据如何进行比较大小?

521 阅读1分钟

1.转成String类型比较

如果要比较的两个double数据的字符串精度相等,可以将数据转换成string,然后借助string的equals方法来间接实现比较两个double数据是否相等。(Double是一个包装类,不是基本类型,和double是有区别,你可以把Double就看成一个普通的类型,所以类型在比较时都应该用 equals,两个对象通过==运算比较都是不一样的,所以对象应该用equals进行比较。)

Double str1 = 0.02;
Double str2 = 0.0200;
System.out.println(str1.toString().equals(str2.toString()));//true

Double str3 = 0.021;
Double str4 = 0.0200;
System.out.println(str3.toString().equals(str4.toString()));//false

注意上面这种方法只适用于比较精度相同的数据,并且是只用用于比较是否相等的情况下,不能用来判断大小,如下:

Double str5 = 0.03-0.02;
Double str6 = 0.01;
System.out.println(str5.toString().equals(str6.toString()));//false

2.使用Double.doubleToLongBits()方法

Double.doubleToLongBits是Java自带的一个方法,由SUN提供,使用它可以将double转换成long型数据,从而让double按照long的方法(<, >, ==)进行判断大小和是否相等。

System.out.println(Double.doubleToLongBits(0.01) == Double.doubleToLongBits(0.01));//true
System.out.println(Double.doubleToLongBits(0.02) > Double.doubleToLongBits(0.01));//true
System.out.println(Double.doubleToLongBits(0.02) < Double.doubleToLongBits(0.01));//false

3.转成B