问题
我在Java中有以下代码;
BigDecimal price; // assigned elsewhere
if (price.compareTo(new BigDecimal("0.00")) == 0) {
return true;
}
写if条件的最佳方法是什么?
#1 热门回答(320 赞)
使用compareTo(BigDecimal.ZERO)
而不是equals()
:
if (price.compareTo(BigDecimal.ZERO) == 0) // see below
与BigDecimal
constantBigDecimal.ZERO
相比,必须构造一个new BigDecimal(0)
的执行。
为方便起见,仅供参考,BigDecimal
也有常数BigDecimal.ONE
和BigDecimal.TEN
。
注意!
你不能使用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
#2 热门回答(70 赞)
或者,可以使用signum():
if (price.signum() == 0) {
return true;
}
#3 热门回答(21 赞)
有一个常数可以检查:
someBigDecimal.compareTo(BigDecimal.ZERO) == 0