JSTL数字格式:如何构建此模式?

时间:2014-10-22 10:04:30

标签: java jsp formatting jstl decimal

我正在尝试在JSTL中创建一个数字格式模式:

<fmt:message var="myPattern" key="" />

实现这一结果的模式关键是什么:

 Input number: 123456789.00
Output format: 123.456.789,00
  • 简单来说:小数指标是逗号。分组指标是点。
  • setLocale解决方案对我不起作用。解决方案必须纯粹基于模式。 (可控性问题)。
  • 假设模式将直接来自db

2 个答案:

答案 0 :(得分:0)

您可以使用fn:substring函数

来实现它
<c:set value="123456789.00" var="phone"/>
<c:out value="${fn:substring(phone, 0, 3)}.${fn:substring(phone,3,6)}.${fn:substring(phone,6,9)},${fn:substring(phone,10,12)}"/>

别忘了添加,

<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>

标记到它。

答案 1 :(得分:0)

我假设您不知道号码的长度。所以你可以使用默认的数字模式:

<c:set var="output"><fmt:formatNumber type="number" maxFractionDigits="2" value="${yournumber}"/></c:set>

现在输出的格式为:123,456,789.00

接下来使用 fn:replace 将句点与逗号交换(使用@作为占位符)。

<c:set var="output" value="${fn:replace(output, ".", "@")}"/>
<c:set var="output" value="${fn:replace(output, ",", ".")}"/>
<c:set var="output" value="${fn:replace(output, "@", ",")}"/>

或者作为一个声明:

<c:set var="output" value="${fn:replace(fn:replace(fn:replace(output, ".", "@"), ",", "."), "@", ",")}"/>

注意:我没有测试这些行以确保它们没有拼写错误,所以如果您尝试这些行并且必须修复它们,请报告。