
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.转成BigDecimal类型比较
使用BigDecimal中的compareTo方法去比较大小,在工作中,有经验的程序员,在谈到有小数点的加减乘除运算都会想到用BigDecimal来解决。原因是:非整型数,运算由于精度问题,可能会有误差,建议使用BigDecimal类型!
BigDecimal num1 = new BigDecimal(0.01222);
BigDecimal num2 = new BigDecimal(0.02);
if (num1.compareTo(num2) > 0) {
System.out.println("num1大");
} else if (num1.compareTo(num2) < 0) {
System.out.println("num2大");//num2大
} else {
System.out.println("相等");
}

public int compareTo(BigDecimal val)
将此 BigDecimal 与指定的 BigDecimal 比较。根据此方法,值相等但具有不同标度的两个 BigDecimal 对象(如,2.0 和 2.00)被认为是相等的。相对六个 boolean 比较运算符 (<, ==, >, >=, !=, <=) 中每一个运算符的各个方法,优先提供此方法。建议使用以下语句执行上述比较:(x.compareTo(y) 0),其中 <op> 是六个比较运算符之一。
- 指定者:
接口 Comparable 中的 compareTo - 参数:
val - 将此 BigDecimal 与之比较的 BigDecimal。 - 返回:
当此 BigDecimal 在数字上小于、等于或大于 val 时,返回 -1、0 或 1。
相关文章推荐:
项目经理:不要再使用Double类型去进行金额计算啦
