如何在JSTL中格式化这个数字?

时间:2012-02-09 17:56:42

标签: jsp jstl

我想在JSTL中格式化一个数字:

<c:set var="num" value="12345678000199"/>
<fmt:formatNumber type="number" value="${num}" pattern=?/>
<!-- desired output: 12.345.678/0001-99 (Brazilian CNPJ [companies' IRS ID])-->

提前致谢!!

3 个答案:

答案 0 :(得分:2)

使用标准JSTL标记或使用标准NumberFormat API无法实现这一点。您需要为此创建custom JSP tagEL function。您可以使用简单的String操作方法完成工作,甚至(ab)使用Swing的MaskFormatter

String cnpj = "12345678000199";
MaskFormatter mf = new MaskFormatter("##.###.###/####-##");
mf.setValueContainsLiteralCharacters(false);
System.out.println(mf.valueToString(cnpj)); // 12.345.678/0001-99

使用EL功能,你最终可以这样结束:

<c:out value="${util:formatCnpj(user.cnpj)}" />

有关创建EL函数的更多详细信息,另请参阅Hidden features of JSP/Servlet的底部。

答案 1 :(得分:0)

这不是一个数字。这是一个包含数字的字符串。

如果您确实将这些信息存储为数字,则必须自己编写格式化方法。您可以通过将其声明为JSP EL function来使用JSP中的这种格式化方法。

请注意,如果字符串可以具有前导零,则使用数字来存储它是一个更糟糕的想法。

答案 2 :(得分:0)

使用您提供的JSTL代码和所需的结果,格式化的模式是“###。###。### / ####' - '##” 这假设您可能缺少前导零。如果不是这种情况,那么模式可以是 “000.000.000 / 0000 ' - ' 00”

确保你放入 - 单引号,因为它逃脱破折号,这通常是一个特殊字符(打印 - 仅限负数。

来源:http://www.tutorialspoint.com/jsp/jstl_format_formatnumber_tag.htm