我知道如何为某些简单值创建一个空值0。例如,我为我的文本字段设置了以下表达式:
($V{current_val_subtotal} != null) ? $V{current_val_subtotal} : "0.00"
其中$V{current_val_subtotal}
为BigDecimal
。但我试图做以下事情:
(($F{CurrentValue}.doubleValue()/$V{current_val_subtotal}.doubleValue())*100 != null) ? ($F{CurrentValue}.doubleValue()/$V{current_val_subtotal}.doubleValue())*100 : “0.00”
其中$F{CurrentValue}
为BigDecimal
。
预览报告时,我收到以下错误:
The operator != is undefined for the argument type(s) double, null
Errors were encountered when compiling report expression class file:
答案 0 :(得分:1)
你到底在想什么?表达式someDouble / someDouble != null
的含义是什么?
你有两个原语的除法,它们永远不会产生null:如果BigDecimal都是非null,你可以得到一个double,否则得到NullPointerException。这就是你得到编译错误的原因。
你可能想要这样的东西
($F{CurrentValue} != null && $V{current_val_subtotal} != null) ?
($F{CurrentValue}.doubleValue() / $V{current_val_subtotal}.doubleValue() * 100) : 0
或
($F{CurrentValue} != null && $V{current_val_subtotal} != null) ?
($F{CurrentValue}.divide($V{current_val_subtotal}, 2, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(100)) : BigDecimal.ZERO