2013-05-02 30 views
0

將double到2位小數進行舍入時遇到問題。我知道這個問題在很多地方都有提出。但是我的問題稍有不同,我無法在其他地方找到它。Java - 將雙精度/浮點數四捨五入爲2位小數時出現意外結果

據我所知,有兩種方法可以做到這一點。

  1. Math.round(double*100.0)/100.0
  2. DecimalFormat(「###.##」)

我想使用第一種方式:一個自定義的方式來圓形雙。 當第二個小數爲0時,結果將只打印第一個小數,忽略第二個小數。

例如,

  1. Math.round(1.23333*100.0)/100.0結果是1.23。這很好。
  2. Math.round(3.90*100.0)/100.0.結果是3.9。發生問題。我想顯示3.90而不是3.9
  3. Math.round(3*100.0)/100.0。結果是4.0。我想4.00而不是4.0

所以,我的問題是,我怎麼可以有2個小數的double值,不管最後一個小數是0還是不是。 我知道我可以用第二種方式 - DecimalFormat(「###.##」)來實現我想要的!但是用第一種方法可以做到嗎?

編輯:謝謝你的答案。它看起來不可能使用round()方法來實現它。但是,有些人建議使用兩種方式的組合來實現它。但我認爲只用DecimalFormat(「###.##」)就可以得到我想要的。任何人都可以確認嗎?

回答

0

您是否嘗試過以下方法?

DecimalFormat(「###.00」) 

如果沒有錯,在使用#號時尾隨零將留空。

0

我相信你需要使用兩者的組合來實現你的需求。 四捨五入取得兩位小數的數字,DecimalFormat以兩位小數顯示。

0

你應該DecimalFormat

DecimalFormat format = new DecimalFormat("0.00"); 
System.out.println(Math.round(3.90*100.0)/100.0); // 3.9 
System.out.println(format.format(Math.round(3.90*100.0)/100.0)); // after using format 3.90 
System.out.println(format.format(Math.round(3*100.0)/100.0)); 

可以格式化你的結果和輸出

3.9 
3.90 
3.00 
+0

我認爲只用DecimalFormat而不用Math.round也可以得到我想要的。我想知道如果我只能使用Math.round()來做到這一點。我想現在的答案是「不」。 – Joey 2013-05-02 08:05:18

1

我會建議使用的String.format( 「%1 $ .2f」,X)。它將值舍入到指定的精度(在我們的例子中是2位數字),並在右邊留下尾隨的零。

System.out.println(String.format("%1$.2f",3.121)) gives 3.12 
System.out.println(String.format("%1$.2f",3.129)) gives 3.13 
System.out.println(String.format("%1$.2f",3.12)) gives 3.12 
System.out.println(String.format("%1$.2f",3.10)) gives 3.10