Android:比较两个值不起作用

时间:2015-02-25 11:23:51

标签: android if-statement compare rounding decimalformat

目前我有一个奇怪的问题......我无法弄明白我犯了什么错误。

我有两对相同类型的值,我想知道它们是否相等。 当我在我的日志中打印值时,值相等但我的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{
    ...
 }

3 个答案:

答案 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 ?