问题描述:改变前端界面显示,小数点保留2位。
看了一下后台的查询语句,多层嵌套,关联。使用convert 或者select cast('xx' as decimal())没有很好的解决问题方法。主要针对一列结果。
想到jstl的fmt,遂使用如下解决办法。
<c:if test="${fn:trim(reports.finishrate)!=''}"><fmt:formatNumber value="${reports.finishrate}" pattern="##.##" minFractionDigits="2" ></fmt:formatNumber></c:if>
问题顺利解决。
问题描述:后台查询的结果为List<CData>集合 逐条显示在界面上。1>现需增加一行,统计整张表各列平均值。2>masipack称的空显示为1。用于计算平均值。
前端代码如下:实现2位小数、判断字段包括masipack时取值为1、
<c:choose>
<c:when test="${fn:contains(reports.lineno,'masipack')}">
<c:if test="${fn:trim(reports.finishrate)==' '}">1</c:if>
<c:if test="${fn:trim(reports.finishrate)!=' '}"><fmt:formatNumber value="${reports.finishrate}" pat<span style="white-space:pre"> </span>tern="##.##" minFractionDigits="2" ></fmt:formatNumber></c:if>
</c:when>
<c:otherwise>
<c:if test="${fn:trim(reports.finishrate)==' '}">0</c:if>
<c:if test="${fn:trim(reports.finishrate)!=' '}"><fmt:formatNumber value="${reports.finishrate}" pat<span style="white-space:pre"> </span>tern="##.##" minFractionDigits="2" ></fmt:formatNumber></c:if>
</c:otherwise>
</c:choose>
后台代码如下:重点是CData Object类型转成float 进行计算 Object只要不带其他字符可以转换成很多种数字类型。注意有些转换方式即使转换成功,但会出现错误值。
if(list.size()!=0){
System.out.println(list.size());
int i=0;
float finishrate=0;//
float accorrate=0;
float counts=0;
for(;i<list.size();i++){
if(list.get(i).getString("lineno").contains("masipack")){
finishrate+=1;
accorrate+=Float.valueOf(list.get(i).get("accorrate").toString());
try{
counts+=Float.valueOf(list.get(i).get("counts").toString());
}
catch(Exception e){
counts+=0;
}
}
else{
try{
finishrate+=Float.valueOf(list.get(i).get("finishrate").toString());
}
catch(Exception e){
finishrate+=0;
}
accorrate+=Float.valueOf(list.get(i).get("accorrate").toString());
try{
counts+=Float.valueOf(list.get(i).get("counts").toString());
}
catch(Exception e){
counts+=0;
}
}
}
float finishrateavg=0;
float accorrateavg=0;
float countsavg=0;
int size=list.size();
finishrateavg=finishrate/size;
accorrateavg=accorrate/size;
countsavg=counts/size;
list.get(0).set("finishrateavg", finishrateavg);
list.get(0).set("accorrateavg", accorrateavg);
list.get(0).set("countsavg", countsavg);
}