Проверка нулевого значения BigDecimal в выражении JSP EL

Следующее не всегда ведет себя так, как вы ожидаете:

<c:if test="${someBigDecimal == 0}">

Если someBigDecimal имеет значение 0, но имеет масштаб, отличный от 0, операция == возвращает false. То есть он возвращает истину, когда someBigDecimal является новым BigDecimal («0»), и ложью, когда someBigDecimal является новым BigDecimal («0,00»).

Это является результатом спецификаций JSP 2.0, 2.1 и 2.2, в которых говорится:

Для <,>, <=,> =:

Если A или B - BigDecimal, приведите A и B к BigDecimal а также используйте возвращаемое значение A.compareTo (B).

For ==,! =:

Если A или B - BigDecimal, приведите A и B к BigDecimal, а затем:

  • Если оператор ==, вернуть A.equals (B)
  • Если оператор! =, return! A.equals (B)

Это означает, что операторы == и ! = приводят к вызову .equals () , который сравнивает не только значения, но и масштаб BigDecimals. Другие операторы сравнения приводят к вызову метода .compareTo () , который сравнивает только значения.

Конечно, сработает следующее:

<c:if test="${not ((someBigDecimal < 0) or (someBigDecimal > 0))}">

Но это довольно уродливо, есть ли лучший способ сделать это?

19
задан John S 28 July 2014 в 14:49
поделиться