2013-10-28 22 views
0

我試圖格式化amount.But十進制值沒有被正確的方式舍入。 DecimalFormat是否在循環時不考慮小數值?

public class Testing {  
    private java.text.DecimalFormat dispAmt;  
    public Testing() {     
    }  
    public static void main(String args[]){ 
     Testing testing=new Testing();  
     testing.dispAmt = new java.text.DecimalFormat("##,##,##0.00"); 
     // Line #8 
     System.out.println(testing.dispAmt.format(1974.545));  
     System.out.println(testing.dispAmt.format(1974.535)); 
    } 
}  

OutPut: 
========= 
1,974.54  
1,974.54 


在上面前衛有什麼錯8號線。爲什麼它不是「1,974.55」?我在哪裏犯錯誤!請建議..

回答

0

您需要通過將其設定使用setRoundingMode()方法,因爲默認情況下,設置RoundingMode的格式,它不圓價值。

dispAmt.setRoundingMode(RoundingMode.CEILING); // Ex 1 
dispAmt.setRoundingMode(RoundingMode.HALF_UP); // Ex 2 but I guess you need this in your case 

有很多RoundingMode可用。請檢查文檔。

+0

他可能希望'RoundingMode.HALF_UP' –

+0

好,我已經在答案中鏈接了文檔。 OP可以看看他們並選擇適合他的人。夠公平吧?! – SudoRahul

2

默認DecimalFormat使用的HALF_EVENwhich

表現爲用於RoundingMode.HALF_UP如果數字到捨棄部分的左側是奇數舍入模式;表現爲RoundingMode.HALF_DOWN,如果它是平坦的。

在這種情況下,倒數第二個至少顯著位的1974.5454是即使這樣的值向下取整。相反,3的價值很奇怪,因此在隨後的format聲明中發生了整數。

嘗試使用RoundingMode.HALF_UP

testing.dispAmt.setRoundingMode(RoundingMode.HALF_UP); 
0

DecimalFormat是NumberFormat的一個具體子類,用於格式化十進制數。這並沒有給出數字。 INFO 這只是使用你給出的模式來顯示數字。

DecimalFormat提供了用於格式化的RoundingMode中定義的舍入模式。默認情況下,它使用RoundingMode.HALF_EVEN。

+0

鏈接很有用,但文檔相當長。我們可以在文檔中找到這個指針嗎? –

+0

閱讀第一段,它只提及格式。我編輯答案DecimalFormat支持舍入看看。 –