BigDecimal舍入在Jasper iReport中无法正常工作

时间:2015-07-02 09:47:28

标签: java jasper-reports bigdecimal

我在iReport设计中将其定义为变量:

$V{total_ver}.intValue() != 0 ? new BigDecimal((new BigDecimal( $F{TotalVerified}+"").divide( new BigDecimal( $V{total_ver} +"") , 4, RoundingMode.HALF_DOWN )).multiply(new BigDecimal(100))+"")  : new BigDecimal(0) 

它应该显示90.91,但它显示100.0000。

我测试了Java程序中的等价物:

total_ver  != 0 ? new BigDecimal((new BigDecimal( TotalVerified+"").divide( new BigDecimal( total_ver +"") , 4, RoundingMode.HALF_DOWN )).multiply(new BigDecimal(100))+"")  : new BigDecimal(0) 

并且它工作正常(显示90.91),那么为什么表达式无法在Jasper iReport中返回正确的值?

2 个答案:

答案 0 :(得分:0)

似乎TotalVerified不是String,因此构造函数无法设置精度。如果它是双重的(应该避免)。当一个int时,精度为0位。

new BigDecimal((new BigDecimal( $F{TotalVerified}+"").setScale(2)

如果TotalVerified已经是一个带有“90.91”的字符串,则java版本可能有用。

答案 1 :(得分:0)

您的原始表达式非常复杂,可以像计算百分比一样简单。请改为尝试以下步骤:

$F{TotalVerified}$V{total_ver}的初始值表达式设置为:
new java.math.BigDecimal(0.0)

使用此表达式而不是您最初使用的表达式:

$V{total_ver}.intValue() != 0 ? $F{TotalVerified}.divide($V{total_ver}).multiply(100.0)
: new BigDecimal(0)