BigDecimal等于()与compareTo()
问题
考虑简单的测试类:
import java.math.BigDecimal;
/**
* @author The Elite Gentleman
*
*/
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
BigDecimal x = new BigDecimal("1");
BigDecimal y = new BigDecimal("1.00");
System.out.println(x.equals(y));
System.out.println(x.compareTo(y) == 0 ? "true": "false");
}
}
你可以(有意识地)说x
等于y
(不是对象引用),但是当你运行该程序时,以下结果显示:
false
true
问题:267130794和equals()
inBigDecimal
之间有什么区别?compareTo
可以确定x
等于y
?
PS:我看到BigDecimal在equals()
方法上有一个inflate()
方法。实际上是什么inflate()
do?
#1 热门回答(171 赞)
答案是在equals()
方法的JavaDoc中:
与compareTo不同,此方法只考虑两个BigDecimal对象的值和比例相等(因此通过此方法比较时2.0不等于2.00)。
换句话说:equals()
checks如果theBigDecimal
对象是正好相同in每个aspect.compareTo()
"only"比较它们的数值。
#2 热门回答(1 赞)
我看到BigDecimal在equals()方法上有一个inflate()方法。 inflate()实际上做了什么?
基本上,inflate()
callsBigInteger.valueOf(intCompact)
必要时,即它创建未缩放的值,存储为aBigInteger
fromlong intCompact
。如果你不需要那个BigInteger
,并且未缩放的值适合along``BigDecimal
似乎尝试尽可能地节省空间。
#3 热门回答(-3 赞)
你还可以与双倍值进行比较
BigDecimal a= new BigDecimal("1.1"); BigDecimal b =new BigDecimal("1.1");
System.out.println(a.doubleValue()==b.doubleValue());