文章目录

  • 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 类型创建对象,并且建议使用字符串创建,因为在看起来数字相等的情况下,使用字符串的精度更高。

java 比数字大小 java中怎么比较数字大小_System


java 比数字大小 java中怎么比较数字大小_double_02

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然后借助stringcompareTo方法来间接实现比较两个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");