我想总结两个BigDecimal
,但在此之前我需要知道这个值不是null(我可以检查Java方面,但我想尝试Jasper方面)。
所以,我做了这个检查:
($F{a} != null ? $F{a} : new BigDecimal(0))
($F{b} != null ? $F{b} : new BigDecimal(0))
现在,我必须总结a
和b
,但如果我这样做:
($F{a} != null ? $F{a} : new BigDecimal(0)).add($F{b} != null ? $F{b} : new BigDecimal(0))
我明白了:
当前表达式无效。请验证它!
我该如何解决?
答案 0 :(得分:0)
假设您的字段都属于java.math.BigDecimal
类,并且您使用的是language="java"
或language="groovy"
你的表情有没有错误!
不要担心表达式编辑器它简单无法理解($F{a} != null ? $F{a} : new BigDecimal(0))
是java.math.BigDecimal
,这就是为什么它声明“当前表达式是无效。请验证!“并在 .add 处显示一个红点。
只需按“确定”即可享受您的结果!
如果您想简化表达式或只是删除表达式编辑器中的错误,您可以使用变量。
答案 1 :(得分:0)
我遇到了同样的问题。显式地转换新的BigDecimal可以消除异常。使用
new Bigdecimal($F{a} != null ? $F{a} : new BigDecimal(0))
并且应该没有问题。
我错了。演员取消了雅斯贝斯'编译时异常但在运行时它抛出了构造函数BigDecimal(NumberComparable)未定义。'请注意,编译时异常很糟糕,因为他们的方法是检查每次击键并在键入时发出警告。为了完成有条件的输入,警告关闭需要花费两倍的精力。现在我需要我的代码在没有演员的情况下工作,我即将尝试
($F{denominator} == 0 ? 0 : $F{numerator} / $F{denominator})