Java中double类型比较大小或相等的方法

Java中double类型比较大小或相等的方法学习记录

在Java中int类型数据的大小比较可以使用双等号,double类型则不能使用双等号来比较大小,如果使用的话得到的结果将永远是不相等,即使两者的精度是相同的也不可以。下面介绍两种比较double数据是否相等的方法。

第一种方法:转换成字符串

如果要比较的两个double数据的字符串精度相等,可以将数据转换成string然后借助string的equals方法来间接实现比较两个double数据是否相等。注意这种方法只适用于比较精度相同的数据,并且是只用用于比较是否相等的情况下,不能用来判断大小。

第二种方法:使用sun提供的Double.doubleToLongBits()方法

该方法可以将double转换成long型数据,从而可以使double按照long的方法(<, >, ==)判断是否大小和是否相等。

Double.doubleToLongBits(0.01) == Double.doubleToLongBits(0.01)   
Double.doubleToLongBits(0.02) > Double.doubleToLongBits(0.01)   
Double.doubleToLongBits(0.02) < Double.doubleToLongBits(0.01)  

第三种方法:

double a = 0.001;
double b = 0.0011;
BigDecimal data1 = new BigDecimal(a);
BigDecimal data2 = new BigDecimal(b);
data1.compareTo(data2)
非整型数,运算由于精度问题,可能会有误差,建议使用BigDecimal类型!

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

第四种方法:

两实数相等:两实数的差在允许的范围内认为相等既可认为是相等的。

范围:1e-6(0.000001)

主要代码:

int IsEqual(double a,double b)
{
    return fabs(a-b) < 0.000001;
}

参考连接:https://blog.csdn.net/qpzkobe/article/details/80820254

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值