Jasper reports 为什么在Jaspersoft Studio中对BigDecimal求和时表达式编辑器会出错?

Jasper reports 为什么在Jaspersoft Studio中对BigDecimal求和时表达式编辑器会出错?,jasper-reports,Jasper Reports,我想对两个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

我想对两个
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))
我得到:

当前表达式无效。请核实一下


如何求解?

假设您的字段都是类
java.math.BigDecimal
,并且您使用的是
language=“java”
language=“groovy”

你的表情没有什么不对

不要担心表达式编辑器很简单,它无法理解
($F{a}!=null?$F{a}:新的BigDecimal(0))
是一个
java.math.BigDecimal
,这就是为什么它声明“当前表达式无效。请验证它!”并在处显示一个红点。添加

只需按“确定”
,即可享受您的结果


如果您想简化表达式或只是删除表达式编辑器中的错误,可以使用变量。

假设您的字段都是类
java.math.BigDecimal
,并且您使用的是
language=“java”
language=“groovy”

你的表情没有什么不对

不要担心表达式编辑器很简单,它无法理解
($F{a}!=null?$F{a}:新的BigDecimal(0))
是一个
java.math.BigDecimal
,这就是为什么它声明“当前表达式无效。请验证它!”并在处显示一个红点。添加

只需按“确定”
,即可享受您的结果


如果您想简化表达式或只是在表达式编辑器中删除错误,可以使用变量。

我也有同样的问题。显式强制转换新的BigDecimal可以消除异常。使用

new Bigdecimal($F{a} != null ? $F{a} : new BigDecimal(0))
应该没有问题

我错了。强制转换消除了Jaspers的编译时异常,但在运行时抛出了“构造函数BigDecimal(NumberComparable)未定义”。请注意,编译时异常很糟糕,因为他们的方法是检查每次击键,并在键入时抛出警告。为了完成输入条件,关闭警告需要加倍的努力。现在我需要我的代码在没有演员阵容的情况下工作,我正准备尝试

($F{denominator} == 0 ? 0 : $F{numerator} / $F{denominator})

我也有同样的问题。显式强制转换新的BigDecimal可以消除异常。使用

new Bigdecimal($F{a} != null ? $F{a} : new BigDecimal(0))
应该没有问题

我错了。强制转换消除了Jaspers的编译时异常,但在运行时抛出了“构造函数BigDecimal(NumberComparable)未定义”。请注意,编译时异常很糟糕,因为他们的方法是检查每次击键,并在键入时抛出警告。为了完成输入条件,关闭警告需要加倍的努力。现在我需要我的代码在没有演员阵容的情况下工作,我正准备尝试

($F{denominator} == 0 ? 0 : $F{numerator} / $F{denominator})

A和B声明为代码> BigDecimal < /代码>吗?考虑接受这个问题的答案,如果仍然没有打开。A和B声明“代码> BigDecimal < /代码>?考虑是否接受这个问题的答案,如果仍然没有打开。