La seguente non si comporta sempre come ci si aspetterebbe:test se un valore BigDecimal è pari a zero in un'espressione JSP EL
<c:if test="${someBigDecimal == 0}">
Se someBigDecimal ha un valore pari a 0, ma ha una scala diverso da 0, il L'operazione == restituisce false. Ovvero, restituisce true quando someBigDecimal è nuovo BigDecimal ("0"), ma false quando someBigDecimal è nuovo BigDecimal ("0.00").
Ciò è dovuto al JSP 2.0, 2.1, e 2.2 specifiche, in cui si afferma:
Per <,>, < =,> =:
Se A o B è BigDecimal, costringere entrambi A e B a BigDecimal e utilizzano il valore restituito da A.compareTo (B).
Per ==, =:
Se A o B è BigDecimal, costringere sia A che B per BigDecimal e poi:
- Se operatore ==, ritornare A .equals (B)
- Se operatore! =, ritorno! A.equals (B)
Ciò significa che gli operatori ==
e !=
generano una chiamata al metodo .equals()
, che confronta non solo i valori, ma anche la scala dei BigDecimals. Gli altri operatori di confronto generano una chiamata al metodo .compareTo()
, che confronta solo i valori.
Naturalmente, il seguente dovrebbe funzionare:
<c:if test="${not ((someBigDecimal < 0) or (someBigDecimal > 0))}">
Ma questo è piuttosto brutto, c'è un modo migliore per fare questo?
Qual è la tua domanda? – kcdragon
@ user617090 Basta chiedersi quale sia il modo migliore per gestire questo. Ho modificato la domanda per renderla più chiara. –
Cosa succede se usi '== 0.0'? –