2013-04-22 66 views
0

我想格式化正數和負數都沒有任何前綴(或相同前綴)的數字。具有等價負值和負值模式的Java NumberFormat

NumberFormat的規範指出,您可以指定正數的子圖案和負號的子圖案,用分號分隔。

每個子模式都有一個前綴,數字部分和後綴。負面的 子模式是可選的;如果不存在,則使用 作爲負子模式,而前面帶有本地化減號(在大多數語言環境中爲' - ')的正子模式 。也就是說,僅「0.00」等於 「0.00; -0.00」。

只要正面和負面的子模式具有不同的前綴或後綴,這就行得通了。如果它們相同,則默認爲帶有減號的默認行爲。

我想是格式化:

  • +1爲:01
  • -1爲:01

我知道,我可以用Math.abs(),這是在JSP/EL環境中不是那麼容易,而且這是一個純粹的格式問題,所以應該在JSP中完成,但這根本不重要。 我無法在有關該行爲的文檔中找到任何提示。當我閱讀上述內容時,我認爲只要我指定任何負面的子模式,它就會被使用。事實並非如此。

有沒有人知道這件事?我可能會向Oracle提交一個錯誤,但如果我錯過了一些東西,首先要檢查。

回答

1

不知道究竟你的格式應該是,但是這似乎爲您的示例工作:

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

嗨,彼得,謝謝。好點,我不知道這種方法。然而,正如我所說的,我想在JSP中做到這一點(沒有scriptlet),在我看來,具有分號的子模式應該是訣竅。我仍然認爲,這是一個錯誤。該錯誤顯然在解析和應用模式到內部結構,而不是在輸出邏輯。 – marc82ch 2013-04-29 06:23:57

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

希望這個幫助...

+0

非常感謝Guillaume,這是一個很好的解決方法,但仍然有點破解,不是嗎?我現在做了類似的事情,但仍然想知道這是否是一個錯誤? – marc82ch 2013-06-14 10:04:36