文章目录
-
- 1.使用BigDecimal
- 2.使用包装类Double
- 3.在误差范围内运行相等
- 4.转换成字符串
- 5.使用doubleToLongBits()方法
在Java中
int
类型数据的大小比较可以使用双等号,
double
类型则不能使用双等号来比较大小,如果使用的话得到的结果将永远是不相等,即使两者的精度是相同的也不可以。下面介绍几种比较double数据是否相等的方法,前三种可以比较正负数,后两种方法只能用于比较两数是否想等以及正数的大小。
1.使用BigDecimal
//1.使用BigDecimal
String num1 = in.next();
String num2 = in.next();
BigDecimal bdL = new BigDecimal(num1);
BigDecimal bdR = new BigDecimal(num2);
if (bdL.compareTo(bdR) < 0)
System.out.println("num1 < num2");
else if (bdL.compareTo(bdR) == 0)
System.out.println("num1 == num2");
else
System.out.println("num1 > num2");
注意:
BigDecimal
可以使用字符串和 double
类型创建对象,并且建议使用字符串创建,因为在看起来数字相等的情况下,使用字符串的精度更高。
2.使用包装类Double
//2.使用包装类Double
Double dL = num1;
Double dR = num2;
if (dL.compareTo(dR) < 0)
System.out.println("num1 < num2");
else if (dL.compareTo(dR) == 0)
System.out.println("num1 == num2");
else
System.out.println("num1 > num2");
3.在误差范围内运行相等
//3.两实数的差在允许的范围内认为相等既可认为是相等的
if (num1 - num2 > 0.000001)
System.out.println("num1 > num2");
else if (num1 - num2 < -0.0000001)
System.out.println("num1 < num2");
else
System.out.println("num1 == num2");
4.转换成字符串
可以将double
数据转换成string
然后借助string
的compareTo
方法来间接实现比较两个double
数据是否相等。注意这种方法只适用于比较精度相同的数据,并且是只能用于比较正数的大小,负数比较结果异常,不过可以用于比较两数是否相等,此时正负数对结果没有影响。
//4.转换成字符串
String strL = String.valueOf(num1);
String strR = String.valueOf(num2);
if (strL.compareTo(strR) < 0)
System.out.println("num1 < num2");
else if (strL.compareTo(strR) == 0)
System.out.println("num1 == num2");
else
System.out.println("num1 > num2");
5.使用doubleToLongBits()方法
使用sun提供的Double.doubleToLongBits()方法,该方法可以将double转换成long型数据,从而可以使double按照long的方法(<, >, ==)判断是否大小和是否相等,但是,这种办法还是只能用于比较正数,负数结果异常,比较两数相等与否是没有问题的。
//4.使用使用sun提供的Double.doubleToLongBits()方法
long lL = Double.doubleToRawLongBits(num1);
long lR = Double.doubleToRawLongBits(num2);
if (lL < lR)
System.out.println("num1 < num2");
else if (lL == lR)
System.out.println("num1 == num2");
else
System.out.println("num1 > num2");
相关文章
暂无评论...