[英]Rounding with DecimalFormat in Java
讓我們看看Java中的以下語句。
System.out.println(new DecimalFormat("0").format(2.4)); //returns 2
System.out.println(new DecimalFormat("0").format(2.5)); //returns 2 <---Concentrate here
System.out.println(Math.round(2.5)); //returns 3
System.out.println(new DecimalFormat("0").format(2.6)); //returns 3
System.out.println(new DecimalFormat("0").format(3.5)); //returns 4
在上述陳述中,除以下情況外,所有其他情況都很明顯。
System.out.println(new DecimalFormat("0").format(2.5));
它應該返回3
但它返回2
。 怎么樣?
DecimalFormat
的默認舍入模式是RoundingMode.HALF_EVEN
。 這意味着如果數字更接近下一個鄰居,它會向上舍入或向下舍入。 當數字恰好在兩個鄰居之間時(在您的情況下為2和3),它會舍入到最接近的偶數(在您的情況下為2)。
正如您所看到的,當您使用3.5進行嘗試時,它會四舍五入為4。
如果您想要更“直觀”的行為,請調用setRoundingMode(RoundingMode.HALF_UP)
http://docs.oracle.com/javase/7/docs/api/java/text/DecimalFormat.html#setRoundingMode setRoundingMode(RoundingMode.HALF_UP)
)
這與HALF_EVEN
相同,但如果數字恰好在兩個鄰居之間,則總是向上舍入。
這是故意的行為。 從文檔 :
四舍五入
DecimalFormat使用半偶數舍入(請參閱ROUND_HALF_EVEN)進行格式設置。
關於ROUND_HALF_EVEN :
舍入模式向“最近鄰居”舍入,除非兩個鄰居等距,在這種情況下,向着偶鄰居舍入。 如果丟棄的分數左邊的數字是奇數,則表現為ROUND_HALF_UP; 如果它是偶數,則表現為ROUND_HALF_DOWN。 請注意,這是在一系列計算中重復應用時最小化累積誤差的舍入模式。
這也稱為銀行家的四舍五入。
另一方面, Math.Round
使用以下公式,即“正常”舍入:
(long)Math.floor(a + 0.5d)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.