La siguiente no siempre se comportan como era de esperar:Comprobando si un valor BigDecimal es cero en una expresión JSP EL
<c:if test="${someBigDecimal == 0}">
Si someBigDecimal tiene un valor de 0, pero tiene una escala diferente de 0, la == operación devuelve falso. Es decir, devuelve verdadero cuando someBigDecimal es un nuevo BigDecimal ("0"), pero falso cuando someBigDecimal es un nuevo BigDecimal ("0.00").
Esto resulta de la JSP 2.0, 2.1, y 2.2 especificaciones, que estado:
Para <,>, < =,> =:
Si A o B es BigDecimal, coaccionar tanto A y B a BigDecimal y usan el valor de retorno de A.compareTo (B).
Para ==, =:
Si A o B es BigDecimal, coaccionar tanto A como B a BigDecimal y luego:
- Si el operador == es, devolver una .equals (B)
- Si el operador es! =, volver! A.equals (B)
Esto significa que los operadores ==
y !=
dan como resultado una llamada al método .equals()
, que compara no solo los valores, sino también la escala de los BigDecimals. Los otros operadores de comparación dan como resultado una llamada al método .compareTo()
, que compara solo los valores.
Por supuesto, la siguiente funcionaría:
<c:if test="${not ((someBigDecimal < 0) or (someBigDecimal > 0))}">
Pero esto es más bien feo, hay una mejor manera de hacer esto?
¿Cuál es tu pregunta? – kcdragon
@ user617090 Solo me pregunto cuál es la mejor manera de lidiar con esto. He editado la pregunta para aclarar esto. –
¿Qué sucede si usas '== 0.0'? –