Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsp 如何在JSTL中格式化此数字?_Jsp_Jstl - Fatal编程技术网

Jsp 如何在JSTL中格式化此数字?

Jsp 如何在JSTL中格式化此数字?,jsp,jstl,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])--> 提前谢谢 这不是一个数字。这是一个包含数字的字符串

我想以如下方式在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中的这个格式化方法作为一个文件进行delaring来使用它


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

这在标准JSTL标记和它在后台使用的标准API中都是不可能的。您需要为此创建一个or。您可以使用简单的操作方法,甚至(ab)使用Swing的:

有了EL功能,您最终可以得到如下结果:

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


有关创建EL函数的更多详细信息,请参见的底部。

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

请确保在转义破折号时使用单引号,破折号通常是一个特殊字符(打印-仅适用于负数)


来源:

Hi@JB Nizet,感谢您的回复。我可以理解您的观点,但是,对于任何pourpose,此变量都不会包含数字以外的字符。它在软件和应用程序(甚至MSOffice)中非常常见这个数字在我的国家是格式化的。我更喜欢将它存储为一个数字,用于索引、关系、空间和性能问题。一个双精度?我可以理解一个长的,但是一个双精度?你知道所有的数字,特别是当它们是非常大的数字时,不能用双精度表示吗?不,你是对的。我在Ac中遇到了长的问题cess,在那里我必须使用double来存储足够大的数字(因为它的long无法做到这一点)。但这是MySQL。此外,当用户要求您能够像'12.%/000?-%'那样搜索
cnpj时,您会后悔将它们存储为数字,因为这是一种过去不连续的ID。我看不到“筛选”的用途一些顺序的CNPJ,因为全国所有的公司都有一个,我将只保留几千(百万之间)。最后两位数字(示例中为99)是数字的控制者(它们是根据一种mod算法计算的)。但是,你让我问自己是否值得查询“/0001”,这是主公司的某个“分支”的顺序(在本例中是00020003,等等)。
<c:out value="${util:formatCnpj(user.cnpj)}" />