目前我有一个奇怪的问题......我无法弄明白我犯了什么错误。
我有两对相同类型的值,我想知道它们是否相等。 当我在我的日志中打印值时,值相等但我的if语句不起作用:/
值来自double类型,但我使用BigDecimal将小数减少到两位数,就像这样......
double a = 50.7739202f;
BigDecimal bdA = new BigDecimal(a);
BigDecimal A = bdA.setScale(2, BigDecimal.ROUND_DOWN);
A和B是50.77 C和D为60.07
但他总是去其他地方
if(A == B && C == D){
...
}
else{
...
}
答案 0 :(得分:3)
要比较BigDecimals,你应该使用他们的
compareTo()
方法而非“==”
a.compareTo(b); // returns (-1 if a < b), (0 if a == b), (1 if a > b)
另外,你应该避免使用equals()方法,因为它比较了BigDecimals的“比例”。
BigDecimal a = new BigDecimal("2.00");
BigDecimal b = new BigDecimal("2.0");
print(a.equals(b)); // false
答案 1 :(得分:0)
==
测试对象的引用,而不是值。使用BigDecimal&#39; s compareTo
if (A.compareTo(B) == 0 && C.compareTo(D) == 0) {
} else {
}
当值相等时, compareTo
返回0
答案 2 :(得分:0)
在两个对象上使用==
时,您正在比较它们的内存引用。
A == B
(A和B都是对象)表示Is A's data stored at the same memory place as B's ?