【问题标题】:How to format this number in JSTL?如何在 JSTL 中格式化这个数字?
【发布时间】:2012-02-09 17:56:41
【问题描述】:

我想在 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])-->

提前致谢!!

【问题讨论】:

    标签: jsp jstl


    【解决方案1】:

    标准 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 的底部。

    【讨论】:

      【解决方案2】:

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

      如果你真的把这样的信息存储为数字,你将不得不自己编写一个格式化方法。您可以通过将其声明为 JSP EL function 来使用 JSP 中的这种格式化方法。

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

      【讨论】:

      • 嗨@JB Nizet,感谢您的回复。我明白你的意思,但是,对于任何浇注,这个变量永远不会包含数字以外的字符。在我的国家,这种数字格式在软件和应用程序(甚至 MSOffice)中很常见。我更喜欢将其存储为索引、关系、空间和性能问题的数字。
      • 双份?我可以理解一个长,但一个双?您是否知道所有数字,尤其是当它们是非常大的数字时,不能用双精度数精确表示?
      • 不,你是对的。我在 Access 中遇到了 long 问题,我必须使用双精度数来存储足够大的数字(因为它的 long 无法做到这一点)。但这是 MySQL。
      • 另外,当您的用户要求您搜索 cnpj like '12.%/000?-%' 时,您会后悔将它们存储为数字
      • 可能不是,因为这是一种过去不连续的ID。我看不到“过滤”一些连续的 CNPJ 的用途,因为该国所有公司都有一个,而我将只保留几千(几百万之间)。最后两位数字(在示例中为 99)是数字的控制器(它们是根据一种 mod 算法计算的)。但是,你让我问自己是否值得查询“/0001”,这是一家主要公司的某个“分支机构”的序列(在这种情况下将是 0002、0003 等)。
      【解决方案3】:

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

      确保将 - 放在单引号中,因为它转义破折号,这通常是一个特殊字符(打印 - 仅用于负数。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-05-30
        • 2015-06-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多