Java NumberFormat具有等效的负面和正面模式

时间:2013-04-22 11:36:17

标签: java formatting number-formatting

我想格式化一个没有任何前缀(或相同前缀)的数字,用于正数和负数。

NumberFormat的规范声明您可以为正数指定子模式,为负数指定子模式,用分号分隔。

  

每个子模式都有前缀,数字部分和后缀。否定的   子模式是可选的;如果没有,那么积极的子模式   使用前缀为局部减号(大多数语言环境中为“ - ”)   作为负子模式。也就是说,单独“0.00”相当于   “0.00; -0.00”。

只要正面和负面子模式具有不同的前缀或后缀,这都有效。如果它们相同,则默认为带有减号的默认行为。

我想要的是格式化:

  • +1 as:01
  • -1 as:01

我知道我可以使用Math.abs(),这在JSP / EL环境中并不那么容易,而且它是一个纯格式问题,所以应该在JSP中完成,但这根本不是重点。 我在文档中找不到有关该行为的任何提示。当我阅读上述内容时,我认为只要我指定任何负子模式,就会使用它。事实并非如此。

有人对此有所了解吗?我可能会向Oracle提交一个错误,但是如果我遗漏了某些内容,我想先检查一下。

2 个答案:

答案 0 :(得分:1)

不确定您的格式应该是什么,但这似乎适用于您的示例:

DecimalFormat f = new DecimalFormat(":00");
f.setNegativePrefix(":");
System.out.println(f.format(1));  // :01
System.out.println(f.format(-1)); // :01 

答案 1 :(得分:1)

假设你的wepapp中有JSTL,你可以使用以下内容:

<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<fmt:formatNumber pattern=":#" minIntegerDigits="2" value="${fn:replace('-1', '-', '')}" />

希望这有帮助...