自定义JSTL-保留两位小数,添加千分位分隔符

版权声明:本文为博主原创文章,未经博主允许不得转载。 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

对比结果为

猜你喜欢

转载自blog.csdn.net/wangqing84411433/article/details/81072719