我有以下代码在Java;
BigDecimal price; // assigned elsewhere
if (price.compareTo(new BigDecimal("0.00")) == 0) {
return true;
}
写if条件的最好方法是什么?
我有以下代码在Java;
BigDecimal price; // assigned elsewhere
if (price.compareTo(new BigDecimal("0.00")) == 0) {
return true;
}
写if条件的最好方法是什么?
当前回答
使用compareTo(BigDecimal.ZERO)代替equals():
if (price.compareTo(BigDecimal.ZERO) == 0) // see below
与BigDecimal常量BigDecimal进行比较。ZERO避免了每次执行都必须构造一个新的BigDecimal(0)。
供你参考,BigDecimal也有常量BigDecimal。ONE和BigDecimal。十张,方便您使用。
注意!
你不能使用BigDecimal#equals()的原因是它考虑了比例:
new BigDecimal("0").equals(BigDecimal.ZERO) // true
new BigDecimal("0.00").equals(BigDecimal.ZERO) // false!
所以不适合进行纯数字比较。然而,BigDecimal.compareTo()在比较时不考虑比例:
new BigDecimal("0").compareTo(BigDecimal.ZERO) == 0 // true
new BigDecimal("0.00").compareTo(BigDecimal.ZERO) == 0 // true
其他回答
有一个常数,你可以检查:
someBigDecimal.compareTo(BigDecimal.ZERO) == 0
对于你的例子,一个简单而更好的方法是:
BigDecimal price;
if(BigDecimal.ZERO.compareTo(price) == 0){
//Returns TRUE
}
使用compareTo(BigDecimal.ZERO)代替equals():
if (price.compareTo(BigDecimal.ZERO) == 0) // see below
与BigDecimal常量BigDecimal进行比较。ZERO避免了每次执行都必须构造一个新的BigDecimal(0)。
供你参考,BigDecimal也有常量BigDecimal。ONE和BigDecimal。十张,方便您使用。
注意!
你不能使用BigDecimal#equals()的原因是它考虑了比例:
new BigDecimal("0").equals(BigDecimal.ZERO) // true
new BigDecimal("0.00").equals(BigDecimal.ZERO) // false!
所以不适合进行纯数字比较。然而,BigDecimal.compareTo()在比较时不考虑比例:
new BigDecimal("0").compareTo(BigDecimal.ZERO) == 0 // true
new BigDecimal("0.00").compareTo(BigDecimal.ZERO) == 0 // true
if(price.floatValue() == 0){
return true; //works for 0\0.0
}
你会想要使用equals(),因为它们是对象,并利用内置的ZERO实例:
if (selectPrice.equals(BigDecimal.ZERO))
请注意,.equals()将比例考虑在内,因此除非selectPrice与. zero的比例(0)相同,否则将返回false。
将比例从等式中剔除:
if (selectPrice.compareTo(BigDecimal.ZERO) == 0)
我应该指出,对于某些数学情况,0.00 != 0,这就是为什么我认为.equals()考虑了刻度。0.00表示百分位的精度,而0则不是那么精确。根据具体情况,您可能希望坚持使用.equals()。