簡體   English   中英

在Java中使用DecimalFormat進行舍入

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM