我有一個BigDecimal
字段amount
代表金錢,我需要在瀏覽器中以$123.00
,$15.50
,$0.33
的格式打印它的值。如何打印格式化的BigDecimal值?
我該怎麼做? (我唯一看到自己的簡單解決方案是從BigDecimal
得到floatValue
,然後使用NumberFormat
對小數部分進行兩位數的精確計算)。
我有一個BigDecimal
字段amount
代表金錢,我需要在瀏覽器中以$123.00
,$15.50
,$0.33
的格式打印它的值。如何打印格式化的BigDecimal值?
我該怎麼做? (我唯一看到自己的簡單解決方案是從BigDecimal
得到floatValue
,然後使用NumberFormat
對小數部分進行兩位數的精確計算)。
public static String currencyFormat(BigDecimal n) {
return NumberFormat.getCurrencyInstance().format(n);
}
它將使用您的語言環境來選擇您的貨幣符號。 NumberFormat's javadoc
這可能是有意義的特定情況下的另一種方式是
BigDecimal newBD = oldBD.setScale(2);
我只是說,在某些情況下,這因爲當涉及到金錢超越小數點後2位沒有意義。以這一步,這可能會導致
String displayString = oldBD.setScale(2).toPlainString();
,但我只是想強調的setScale方法(也可進行第二次舍入模式參數來控制最後一個小數位是如何處理的。在某些情況下, Java迫使你指定這個舍入方法)。
要設置千個分隔符,說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()。
BigDecimal(19.0001).setScale(2, BigDecimal.RoundingMode.DOWN)
應該是BigDecimal(19.001).setScale(2,BigDecimal.ROUND_HALF_UP).toString() – 2018-01-17 19:18:47
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
如果你喜歡零顯示爲0.00(而不是.00),使用模式'「# ,## 0.00「'代替。 – Jonik 2016-05-17 13:37:12