如何打印格式化的BigDecimal值?

我有一个代表金钱的BigDecimal字段amount ,我需要以$123.00$15.50$0.33的格式在浏览器中打印它的值。

我怎样才能做到这一点?

(我看到的唯一简单的解决scheme是从BigDecimal获取floatValue ,然后使用NumberFormat为分数部分创build两位数的精度)。

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

它将使用您的区域设置来select您的货币符号。 NumberFormat的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掩码,但它也成功地格式化了较长的值。 请注意,结果中的逗号(,)分隔符取决于您的语言环境。 它可能只是俄语区域的空间()。

  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

 BigDecimal(19.0001).setScale(2, BigDecimal.RoundingMode.DOWN)