当我在Jaspersoft Studio中汇总BigDecimal时,为什么我在表达式编辑器中出错?

时间:2016-01-27 13:47:15

标签: jasper-reports

我想总结两个BigDecimal,但在此之前我需要知道这个值不是null(我可以检查Java方面,但我想尝试Jasper方面)。

所以,我做了这个检查:

($F{a} != null ? $F{a} : new BigDecimal(0))
($F{b} != null ? $F{b} : new BigDecimal(0))

现在,我必须总结ab,但如果我这样做:

($F{a} != null ? $F{a} : new BigDecimal(0)).add($F{b} != null ? $F{b} : new BigDecimal(0))

我明白了:

  

当前表达式无效。请验证它!

我该如何解决?

2 个答案:

答案 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})