saber que otro mayor greater con comparar como cero java bigdecimal

que - java bigdecimal bigdecimal



Cómo comprobar si la variable BigDecimal== 0 en java? (8)

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?


Alternativamente, creo que vale la pena mencionar que el comportamiento de los métodos equals y compareTo en la clase BigDecimal no son consistentes entre sí .

Esto básicamente significa que:

BigDecimal someValue = new BigDecimal("0.00"); System.out.println(someValue.compareTo(BigDecimal.ZERO)==0); //true System.out.println(someValue.equals(BigDecimal.ZERO)); //false

Por lo tanto, debe tener mucho cuidado con la escala en su variable someValue , de lo contrario obtendría un resultado inesperado.


Alternativamente, se puede usar signum() :

if (price.signum() == 0) { return true; }


Desearía usar equals () dado que son objetos, y utilizar la instancia CERO incorporada:

if(selectPrice.equals(BigDecimal.ZERO))

Tenga en cuenta que .equals() tiene en cuenta la escala, por lo tanto, a menos que selectPrice tenga la misma escala (0) que .ZERO , esto dará como .ZERO falso.

Para sacar escala de la ecuación por así decirlo:

if(selectPrice.compareTo(BigDecimal.ZERO) == 0)

Debo señalar que para ciertas situaciones matemáticas, 0.00 != 0 , por lo que imagino que .equals() tiene en cuenta la escala. 0.00 da precisión al lugar de las centésimas, mientras que 0 no es tan preciso. Dependiendo de la situación, es posible que desee seguir con .equals() .


Hay una constante con la que puedes comparar:

someBigDecimal.compareTo(BigDecimal.ZERO) == 0


Hay una constante estática que representa 0 :

BigDecimal.ZERO.equals(selectPrice)

Debe hacer esto en lugar de:

selectPrice.equals(BigDecimal.ZERO)

para evitar el caso donde selectPrice es null .


Use compareTo(BigDecimal.ZERO) lugar de equals() :

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

Comparando con la constante BigDecimal.ZERO evita tener que construir un new BigDecimal(0) cada ejecución.

FYI, BigDecimal también tiene las constantes BigDecimal.ONE y BigDecimal.TEN para su conveniencia.

¡Nota!

La razón por la que no puede usar BigDecimal#equals() es que toma en consideración la escala :

new BigDecimal("0").equals(BigDecimal.ZERO) // true new BigDecimal("0.00").equals(BigDecimal.ZERO) // false!

por lo tanto, no es adecuado para una comparación puramente numérica. Sin embargo, BigDecimal.compareTo() no tiene en cuenta la escala al comparar:

new BigDecimal("0").compareTo(BigDecimal.ZERO) == 0 // true new BigDecimal("0.00").compareTo(BigDecimal.ZERO) == 0 // true


Usualmente uso lo siguiente:

if (selectPrice.compareTo(BigDecimal.ZERO) == 0) { ... }


BigDecimal.ZERO.setScale(2).equals(new BigDecimal("0.00"));