Use compareTo(BigDecimal.ZERO) instead of equals():
if (price.compareTo(BigDecimal.ZERO) == 0) // see below
Comparing with the BigDecimal constant BigDecimal.ZERO avoids having to construct a new BigDecimal(0) every execution.
FYI, BigDecimal also has constants BigDecimal.ONE and BigDecimal.TEN for your convenience.
Note!
The reason you can't use BigDecimal#equals() is that it takes scale into consideration:
new BigDecimal("0").equals(BigDecimal.ZERO) // true
new BigDecimal("0.00").equals(BigDecimal.ZERO) // false!
so it's unsuitable for a purely numeric comparison. However, BigDecimal.compareTo() doesn't consider scale when comparing:
new BigDecimal("0").compareTo(BigDecimal.ZERO) == 0 // true
new BigDecimal("0.00").compareTo(BigDecimal.ZERO) == 0 // true
Answer from Bohemian on Stack OverflowUse compareTo(BigDecimal.ZERO) instead of equals():
if (price.compareTo(BigDecimal.ZERO) == 0) // see below
Comparing with the BigDecimal constant BigDecimal.ZERO avoids having to construct a new BigDecimal(0) every execution.
FYI, BigDecimal also has constants BigDecimal.ONE and BigDecimal.TEN for your convenience.
Note!
The reason you can't use BigDecimal#equals() is that it takes scale into consideration:
new BigDecimal("0").equals(BigDecimal.ZERO) // true
new BigDecimal("0.00").equals(BigDecimal.ZERO) // false!
so it's unsuitable for a purely numeric comparison. However, BigDecimal.compareTo() doesn't consider scale when comparing:
new BigDecimal("0").compareTo(BigDecimal.ZERO) == 0 // true
new BigDecimal("0.00").compareTo(BigDecimal.ZERO) == 0 // true
Alternatively, signum() can be used:
if (price.signum() == 0) {
return true;
}
It's as simple as:
if (value.compareTo(BigDecimal.ZERO) > 0)
The documentation for compareTo actually specifies that it will return -1, 0 or 1, but the more general Comparable<T>.compareTo method only guarantees less than zero, zero, or greater than zero for the appropriate three cases - so I typically just stick to that comparison.
Possible better way:
if (value.signum() > 0)
signum returns -1, 0, or 1 as the value of this BigDecimal is negative, zero, or positive.