¿Cómo comprobar si la variable BigDecimal == 0 en Java?

Resuelto JoJo asked hace 12 años • 14 respuestas

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?

JoJo avatar Jun 08 '12 21:06 JoJo
Aceptado

Usar compareTo(BigDecimal.ZERO)en lugar de equals():

if (price.compareTo(BigDecimal.ZERO) == 0) // see below

Comparar con la BigDecimalconstante BigDecimal.ZEROevita tener que construir new BigDecimal(0)cada ejecución.

Para su información, BigDecimaltambién tiene constantes BigDecimal.ONEy BigDecimal.TENpara 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
Bohemian avatar Jun 08 '2012 14:06 Bohemian

Alternativamente, se puede utilizar signum() :

if (price.signum() == 0) {
    return true;
}
kman avatar Aug 30 '2012 21:08 kman