¿Cómo comprobar si la variable BigDecimal == 0 en Java?
Tengo el siguiente código en Java;
BigDecimal price; // assigned elsewhere
if (price.compareTo(new BigDecimal("0.00")) == 0) {
return true;
}
¿Cuál es la mejor manera de escribir la condición if?
Aceptado
Usar compareTo(BigDecimal.ZERO)
en lugar de equals()
:
if (price.compareTo(BigDecimal.ZERO) == 0) // see below
Comparar con la BigDecimal
constante BigDecimal.ZERO
evita tener que construir new BigDecimal(0)
cada ejecución.
Para su información, BigDecimal
también tiene constantes BigDecimal.ONE
y BigDecimal.TEN
para su conveniencia.
¡Nota!
La razón por la que no puedes usarlo BigDecimal#equals()
es que tiene en cuenta la escala :
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 utilizar signum() :
if (price.signum() == 0) {
return true;
}