问题

我在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

BigDecimalconstantBigDecimal.ZERO相比,必须构造一个new BigDecimal(0)的执行。

为方便起见,仅供参考,BigDecimal也有常数BigDecimal.ONEBigDecimal.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

原文链接