【问题标题】:BigDecimal rounding not working properly in Jasper iReportBigDecimal 舍入在 Jasper iReport 中无法正常工作
【发布时间】:2015-07-02 09:47:28
【问题描述】:

我在 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 中返回正确的值?

【问题讨论】:

  • 你检查过total_ver的类是java.math.BigDecimal吗?这可能是一个愚蠢的问题,但最好先检查显而易见的事情。

标签: java jasper-reports bigdecimal


【解决方案1】:

TotalVerified 似乎不是字符串,因此构造函数无法设置精度。如果是双精度则不好(应该避免)。当 int 精度为 0 位时。

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

如果 TotalVerified 已经是带有“90.91”的字符串,那么 java 版本可能会起作用。

【讨论】:

    【解决方案2】:

    对于计算百分比这样简单的事情,您的原始表达式非常复杂。请尝试以下步骤:

    $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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 2014-01-22
      • 1970-01-01
      • 2016-12-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-01
      相关资源
      最近更新 更多