首页 > 编程语言 > 详细

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

时间:2020-06-25 12:29:39      阅读:71      评论:0      收藏:0      [点我收藏+]

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

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

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

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

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

例如:

[java]?view plain?copy

  1. Double.doubleToLongBits(0.01)?==?Double.doubleToLongBits(0.01)
  2. Double.doubleToLongBits(0.02)?>?Double.doubleToLongBits(0.01)
  3. 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)??0),其中 <op> 是六个比较运算符之一。

指定者:

接口?[Comparable](https://blog.csdn.net/cynhafa/article/details/6899921 "java.lang 中的接口")<[BigDecimal](https://blog.csdn.net/cynhafa/article/details/6899921 "java.math 中的类")>?中的?[compareTo](https://blog.csdn.net/cynhafa/article/details/6899921)

参数:

val?- 将此?BigDecimal?与之比较的?BigDecimal。

返回:

当此?BigDecimal?在数字上小于、等于或大于?val?时,返回 -1、0 或 1。

第四种方法:

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

范围:1e-6(0.000001)

主要代码:

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

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

原文:https://www.cnblogs.com/treasury/p/13191452.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!