2010-08-03 104 views
64

我有一個BigDecimal字段amount代表金錢,我需要在瀏覽器中以$123.00,$15.50,$0.33的格式打印它的值。如何打印格式化的BigDecimal值?

我該怎麼做? (我唯一看到自己的簡單解決方案是從BigDecimal得到floatValue,然後使用NumberFormat對小數部分進行兩位數的精確計算)。

回答

94
public static String currencyFormat(BigDecimal n) { 
    return NumberFormat.getCurrencyInstance().format(n); 
} 

它將使用您的語言環境來選擇您的貨幣符號。 NumberFormat's javadoc

30

這可能是有意義的特定情況下的另一種方式是

BigDecimal newBD = oldBD.setScale(2); 

我只是說,在某些情況下,這因爲當涉及到金錢超越小數點後2位沒有意義。以這一步,這可能會導致

String displayString = oldBD.setScale(2).toPlainString(); 

,但我只是想強調的setScale方法(也可進行第二次舍入模式參數來控制最後一個小數位是如何處理的。在某些情況下, Java迫使你指定這個舍入方法)。

26

要設置千個分隔符,說123,456.78你必須使用DecimalFormat

 DecimalFormat df = new DecimalFormat("#,###.00"); 
    System.out.println(df.format(new BigDecimal(123456.75))); 
    System.out.println(df.format(new BigDecimal(123456.00))); 
    System.out.println(df.format(new BigDecimal(123456123456.78))); 

下面是結果:

123,456.75 
123,456.00 
123,456,123,456.78 

雖然我設置#,###.00面膜,它成功地格式化更大的值了。 請注意,結果中的逗號(,)分隔符取決於您的語言環境。它可能只是俄語區域的space()。

+11

如果你喜歡零顯示爲0.00(而不是.00),使用模式'「# ,## 0.00「'代替。 – Jonik 2016-05-17 13:37:12

1
BigDecimal(19.0001).setScale(2, BigDecimal.RoundingMode.DOWN) 
+0

應該是BigDecimal(19.001).setScale(2,BigDecimal.ROUND_HALF_UP).toString() – 2018-01-17 19:18:47

3
BigDecimal pi = new BigDecimal(3.14); 
BigDecimal pi4 = new BigDecimal(12.56); 

System.out.printf("%.2f",pi); 

//打印3.14

System.out.printf("%.0f",pi4); 

//打印13