java为什么我在Jaspersoft Studio中除掉两个BigDecimal变量时会得到null?
我设置了几个变量。前两个将一个字段的整数值设置为BigDecimal:
$V{Active Unit}.valueOf( $F{Price Qty} )
$V{Reg Unit}.valueOf( $F{Reg Retail Unit} )
接下来我创建的两个变量将字段除以该变量。(此时,我发现单价为1.00美元的单价为2,以这种方式显示为.50)。这些返回空值
$F{Price}.divide($V{Current Unit Price})
$F{Reg Retail}.divide($V{Regular Unit Price})
然后,我将两个新创建的变量相减(这是为了找出我对折扣商品的降价。75-.50是每个商品的.25降价)。这也是返回NULL
$F{Reg Retail}.divide($V{Regular Unit Price})
你知道我做错了什么吗?我对java知之甚少,我通过Jaspersoft Studio使用它。根据我所读到的,我相信我已经正确地解释了这一点。有人有什么想法吗
# 1 楼答案
我也有类似的情况。我的变量“SALDO”从“TOTAL_ENTRADA”中减去“TOTAL_SAIDA”,在大多数情况下都显示正确,但有一天我们发现一组报表参数使变量显示为null
以下是变量的声明方式:
然后将该变量放入一个文本字段中,该文本字段位于一个表的正后方,该表中填充了来自报表查询的数据
要了解这种情况,我必须了解“resetType”配置,正如iReport Ultimate指南所述:
重置类型“列”是指:
阅读之后,我注意到包含“SALDO”的文本字段是页面上出现的第一件事(在所提到的特定案例中)。“SALDO”的值被重置为null,并且由于没有来自报表查询的更多结果,因此它没有更改。如果文本字段前的表格只有一行出现在页面上,“SALDO”将正确显示
使用iReport,我将此配置更改为“Report”,这使得变量在创建报表开始时仅初始化一次。文本字段中弹出“SALDO”的正确值
# 2 楼答案
我相信你必须这样做:
.valueOf($F{Price Qty}.doubleValue())
。您可能要做的另一件事是检查NULL,如下所示:($F{myField} != null) ? $F{myField}.doSomething() : null
。这样,如果未设置值,代码将知道如何处理字段值为null的情况更新
如果所需的值是
BigDecimal
,但该值是其他数值类型(即整数),则必须在调用divide()
方法之前将该值转换为BigDecimal
:像上面这样的东西应该会起作用