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

本文介绍了三种比较浮点数的方法:转换为String类型比较、使用Double.doubleToLongBits()方法和转换为BigDecimal类型进行比较。每种方法都有其适用场景和限制条件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

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类型去进行金额计算啦

在这里插入图片描述
创作不易,感谢您的点赞与支持。
评论 31
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序yang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值