Решение № 1
Ваше решение:
- Используйте обычное поле Double (
doubleField
) для значения столбца.
- Добавить статическое текстовое поле String в том же месте.
- Измените поле Double на Пробел, когда ноль .
- Установите значение PrintWhenExpression для текстового поля String равным:
$F{doubleField} == null
.
Решение № 2
Проблема, как вы указали, в том, что Double и String - это два разных типа данных. Вы можете присвоить строковую переменную значению Double, используя соответствующее выражение. Затем используйте переменную String в качестве поля. Выражение может напоминать:
($F{doubleField} == null) ?
"N/A" : new java.text.DecimalFormat("#.##").format($F{doubleField})
(Примечание: я предпочитаю использовать ==
вместо !=
. Думайте положительно.)
Решение № 3
Измените оператор SQL, чтобы предварительно отформатировать Double как текстовую строку, и используйте «N / A» в строке (с помощью оператора CASE
или DECODE
в запросе).
Однако избегайте этого решения, так как оно не подлежит обслуживанию.
Рекомендация
Не кодировать строку «N / A» во всех отчетах; поместите текст «N / A» в константу или параметр со значением по умолчанию «N / A».