我有一个模板,它遍历地图并显示信息:
#{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模板渲染有关吗?
答案 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;