版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wangqing84411433/article/details/81072719
默认的JSTL标签中的f<mt:formatNumber>采用的是四舍六入五奇偶,来进行保留小数位数的
例如:2.235要求保留两位小数,若第三位小数为5的情况
(1)看第四位,若第4位没有,则看第二位小数,奇数则进位,偶数则舍去
(2).若第四位小数有值,则进位(例如2.365008 进位)
2.235 = 2.24 2.44502 = 2.45
操作步骤:
1.定义标签使用的javs文件
package util;
import java.io.IOException;
import java.math.BigDecimal;
import java.text.DecimalFormat;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.tagext.SimpleTagSupport;
/*四舍五入--保留多两位小数,整数部分添加千分位分隔符*/
public class NumberTag extends SimpleTagSupport{
private double str;
public double getStr() {
return str;
}
public void setStr(double str) {
this.str = str;
}
@Override
public void doTag() throws JspException, IOException {
PageContext ctx = (PageContext)getJspContext();
JspWriter out = ctx.getOut();
double t = new BigDecimal(new Double(str).toString()).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
String m = String.valueOf(t);
String s = m.split("\\.")[1];//取到小数位
if(s.length() == 1){//一位小数补零
m = m + "0";
}
//若小数绝对值在1以内,则不添加分隔符
if(Math.abs(t)<1){
out.println(m);
}else{
DecimalFormat df = new DecimalFormat("#,###.00");
out.println(df.format(t));
}
}
}
2.定义tld文件,将此文件放在WEB-INF目录下,代码如下:
<?xml version="1.0" encoding="UTF-8" ?>
<taglib xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
version="2.1">
<description>WQ的标签库</description>
<display-name>WQ</display-name>
<tlib-version>2.1</tlib-version>
<short-name>wq</short-name>
<uri>/jsp1/tag</uri>
<tag>
<description>四舍五入</description>
<name>fmtNumber</name>
<tag-class>util.NumberTag</tag-class>
<body-content>empty</body-content>
<attribute>
<description>Content</description>
<name>str</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
</taglib>
3.在jsp页面中引入该标签
<c:forEach items="<%=list %>" var="emp">
<tr>
<td>${emp.name}</td>
<td>${emp.age}</td>
<td>${emp.address}</td>
<td><fmt:formatNumber groupingUsed="true" value="${emp.money}" minFractionDigits="2" maxFractionDigits="2"/></td>
<td><wq:fmtNumber str="${emp.money}"/></td>
</tr>
</c:forEach>
此处利用EL表达式获取的emp.money是double类型,String类型也是可以的
4.结果对比
数据库中模money字段的数据是:0.245 0.2351 0.2451 0.24501 0.2456
对比结果为