Następujące nie zawsze zachowują się jak można oczekiwać:Sprawdzanie czy wartość BigDecimal jest zero w wyrażeniu JSP EL
<c:if test="${someBigDecimal == 0}">
Jeśli someBigDecimal ma wartość 0, ale ma skalę inną niż 0, == operacja zwraca wartość false. Oznacza to, że zwraca on wartość true, gdy someBigDecimal jest nowym BigDecimal ("0"), ale wartość false, gdy someBigDecimal jest nowym BigDecimal ("0.00").
Wynika to z JSP, 2.0, 2.1 i 2.2 parametrów, które stanowią:
Na <,> < => =:
Jeżeli A lub B jest BigDecimal, zmusić zarówno A i B do BigDecimal i używają wartości zwracanej przez A.compareTo (B).
Na ==, =:
Jeżeli A lub B jest BigDecimal, zmusić zarówno A i B, a następnie do BigDecimal:
- Jeżeli operator ==, w obie strony .equals (B)
- Jeżeli operator! = powrócić! a.equals (B)
Oznacza to, że operatory ==
ipowodują wywołanie metody .equals()
, która porównuje nie tylko wartości, ale także skalę BigDecimals. Inne operatory porównania powodują wywołanie metody .compareTo()
, która porównuje tylko te wartości.
Oczywiście dodaje będzie działać:
<c:if test="${not ((someBigDecimal < 0) or (someBigDecimal > 0))}">
Ale to raczej brzydki, czy istnieje lepszy sposób to zrobić?
Jakie jest Twoje pytanie? – kcdragon
@ user617090 Zastanawiasz się, jaki jest najlepszy sposób, aby sobie z tym poradzić. Zmieniłem to pytanie, aby było jaśniejsze. –
Co się stanie, jeśli użyjesz '== 0.0'? –