0

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

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

每个子模式都有一个前缀、数字部分和后缀。否定子模式是可选的;如果不存在,则以局部减号(在大多数语言环境中为“-”)为前缀的正子模式用作负子模式。也就是说,单独的“0.00”等同于“0.00;-0.00”。

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

我想要的是格式化:

  • +1 为:01
  • -1 为:01

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

有人知道吗?我可能会向 Oracle 提交错误,但如果我遗漏了什么,我想先检查一下。

4

2 回答 2

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', '-', '')}" />

希望这有助于...

于 2013-06-13T19:56:03.280 回答
1

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

DecimalFormat f = new DecimalFormat(":00");
f.setNegativePrefix(":");
System.out.println(f.format(1));  // :01
System.out.println(f.format(-1)); // :01 
于 2013-04-26T01:03:57.573 回答