У меня есть переменные в JasperReport 6.60, которые выполняют какое-то средневзвешенное значение, и я пытался избежать деления на ноль, передав его через условие IF, но он по-прежнему выдает «Деление не определено».
Допустим, я хочу показать переменную $V{weighted_avg} в группе с именем ([Group] round), которая состоит из двух раундов. В 1-м раунде $V{divisor} равен нулю (0), но во 2-м раунде $V{divisor} не равен нулю
Переменная $V{weighted_avg} содержит выражение:
IF($V{divisor}.compareTo(BigDecimal(0.00)) == 1, $V{dividend}.divide($V{divisor}, new MathContext(4)), null)
это приведет к ошибке «Деление не определено» для этого выражения при расчете.
Но если я делаю это:
IF($V{divisor}.compareTo(BigDecimal(0.00)) == 1, "> 0", "< 0")
результат показан правильно.
Все переменные являются Bigdecimal, и я ожидал, что $V{weighted_avg} показывает "null", когда $V{divisor} равен нулю
Встроенная функция IF
оценивает все свои аргументы, вам нужно использовать тернарный оператор Java, чтобы оценивалось только выражение, соответствующее соответствующей ветке.
Как в
$V{divisor}.compareTo(BigDecimal(0.00)) == 1 ? $V{dividend}.divide($V{divisor}, new MathContext(4)) : null
Спасибо за ваш ответ, он отлично работает с вашим ответом. Я не думал о тернарном операторе.
Я получил «временное» решение, я установил значение $V{divisor} равным нулю на полосе деталей, чтобы они не выдавали ошибку на полосе [Group]