2013-10-11 26 views
1

我不知道,如果這只是我,但FMT:formatNumber四捨五入不一致

<fmt:formatNumber var="roundedNumber" value="2.5" type="number" pattern="#" /> 

給我

<%-- ${roundedNumber} == 2 --%> 

你知道爲什麼formatNumber不圓這3?

UPDATE

看來,如果數量爲奇數正確圓的,但如果是偶數事實並非如此。

2.5 will be rounded 2 
2.51 will be rounded 3 
3.5 will be rounded 4 
3.51 will be rounded 4 
4.5 will be rounded 4 
4.51 will be rounded 5 
... etc 
+1

相關/ dupe:http://stackoverflow.com/questions/11735545/ceiling-of-a-number-in-jstl-el – BalusC

回答

5

我認爲原因可能是由容器實現JSTL,但同樣的事情發生在我身上。

我再讀取JavaServer Pages Standard Tag Library version 1.0規格和節9.7 FMT:formatNumber題爲說明它說,通過模式屬性指定的模式字符串必須遵循類的java.text指定的模式語法 段落.DecimalFormat。

於是我擡起頭來的Java文檔的java.text.DecimalFormat,並在標題爲四捨五入它指出,在默認情況下,它使用了RoundingMode.HALF_EVEN模式圓。除非兩個鄰居之間的距離相等,在這種情況下,這個模式向一個「最近的鄰居」發送一個數字,在這種情況下,這個模式圍繞着鄰居。

然後解釋爲什麼2.5輪到2(最近的偶數鄰居)和3.5輪到4(最近的偶數鄰居)。

+0

非常有幫助的最後一行。謝謝 – user2798227