我在 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 中返回正确的值?
最佳答案
TotalVerified 似乎不是字符串,因此构造函数无法设置精度。如果是 double 则不好(应该避免)。当 int 时,精度为 0 位。
new BigDecimal((new BigDecimal( $F{TotalVerified}+"").setScale(2)
如果 TotalVerified 已经是带有“90.91”的字符串,则 java 版本可能会起作用。
关于java - BigDecimal 舍入在 Jasper iReport 中无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31181216/