ResultSet有许多Double
个值字段(模式类似"###0.000"
)。某些值可以是null
。
我想将null
值替换为"N/A"
,String
并且无法打印到Double字段。打印"0.00"
null
值是不可接受的。
使用($F{value} != null) ? $F{value} : "N/A"
的PrintWhenExpression值不起作用;不可能以这种方式使用模式。
添加写入“N / A”的隐藏字段。仅当值为null
时才会打印这些字段。
是否有更好的解决方案,如果是,那又是什么?
谢谢。
答案 0 :(得分:10)
您的解决方案:
doubleField
)作为列值。$F{doubleField} == null
。问题是,正如您所指出的,Double和String是两种不同的数据类型。您可以使用适当的表达式将String变量分配给Double的值。然后使用String变量作为字段。表达式可能类似于:
($F{doubleField} == null) ?
"N/A" : new java.text.DecimalFormat("#.##").format($F{doubleField})
(注意:我的偏好是使用==
代替!=
。积极思考。)
更改SQL语句以将Double预格式化为文本字符串,并在字符串中使用“N / A”(在查询中使用CASE
或DECODE
语句)。
避免使用此解决方案,因为它无法维护。
不要在整个报告中硬编码“N / A”字符串;将“N / A”文本放在常量或默认值为“N / A”的参数中。
答案 1 :(得分:0)
您可以在字段表达式中尝试以下操作:
("Your static text "+(($F{field}!=null)?$F{field}:""))
或者,如果您不希望在字段为空时看到静态文本,请尝试将$F{field}!=null
放在PrintWhenExpression
中。