为什么模板不能呈现正确的值?

时间:2011-11-21 10:59:02

标签: java groovy playframework template-engine

我有一个模板,它遍历地图并显示信息:


       #{list items:report.getCategoryMap()?.keySet(), as:'cat'}
           %{models.reporting.TransactionReportItem item = report.getCategoryMap()?.get(cat);}%
            
              ${cat}
              ${item?.nbCredit}
              ${item?.getCreditPerc(report.nbCredit)}
              ${item?.nbDebit}
              ${item?.getDebitPerc(report.nbDebit)}
              ${item?.getTotalTransactions()}
            
       #{/list}

由于某种原因,模板总是将getCreditPerc和getDebitPerc的结果呈现为0.0


    public Double getCreditPerc(long totalCredit){
        double perc = (double) (nbCredit / totalCredit);
        Logger.info("nbCredit: %s, total cr: %s", nbCredit, totalCredit);
        return new Double(perc);
    }

调用模板时,我可以在日志中看到输出:

2011-11-21 13:54:22 INFO~ [TransactionReportItem:85] getDebitPerc() - nbDebit:39,总cr:4984

我尝试使用原始类型而不是双重对象但没有成功。 调试代码时,我可以看到所有值都已正确设置。

这可能与groovy模板渲染有关吗?

2 个答案:

答案 0 :(得分:4)

从其他功能发布日志对这个问题没有帮助; - )

然而,问题是你在Java中有两个ints,而你正在划分它们以便得到整数除法...

将此整数转换为double为时已晚......

尝试:

double perc = (double)nbCredit / totalCredit ;

答案 1 :(得分:1)

我的一个愚蠢的想法。这不是代码中的问题吗?

int nbCredit=39;
int total=4984;
double perc = (double) (nbCredit / totalCredit); // gives 0

nbCredit / total是整数的除法,结果为< 1因此它可能会舍入为0

你试过:

double perc =  (double)nbCredit / totalCredit;