Solución:
Usar compareTo(BigDecimal.ZERO)
en lugar de equals()
:
if (price.compareTo(BigDecimal.ZERO) == 0) // see below
Comparando con el BigDecimal
constante BigDecimal.ZERO
evita tener que construir un new BigDecimal(0)
cada ejecución.
FYI, BigDecimal
también tiene constantes BigDecimal.ONE
y BigDecimal.TEN
por su conveniencia.
¡Nota!
La razón por la que no puedes usar BigDecimal#equals()
es que se necesita escala en consideración:
new BigDecimal("0").equals(BigDecimal.ZERO) // true
new BigDecimal("0.00").equals(BigDecimal.ZERO) // false!
por lo que no es adecuado para una comparación puramente numérica. Sin embargo, BigDecimal.compareTo()
no considera la escala al comparar:
new BigDecimal("0").compareTo(BigDecimal.ZERO) == 0 // true
new BigDecimal("0.00").compareTo(BigDecimal.ZERO) == 0 // true
Alternativamente, se puede usar signum ():
if (price.signum() == 0) {
return true;
}
Hay una constante con la que puede verificar:
someBigDecimal.compareTo(BigDecimal.ZERO) == 0
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)