如何打印格式化的BigDecimal值?

Rom*_*man 93 java formatting bigdecimal number-formatting

我有一个BigDecimal字段amount代表钱,我需要打印其值在浏览器的格式一样$123.00,$15.50,$0.33.

我怎样才能做到这一点?

(我认为自己唯一的简单解决方案是floatValue从分数部分开始BigDecimal,然后使用NumberFormat两位数的精度).

Luc*_*eni 120

public static String currencyFormat(BigDecimal n) {
    return NumberFormat.getCurrencyInstance().format(n);
}
Run Code Online (Sandbox Code Playgroud)

它将使用您的区域设置来选择您的货币符号. NumberFormat的javadoc


Jef*_*son 58

要设置千位分隔符,请说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)));
Run Code Online (Sandbox Code Playgroud)

结果如下:

123,456.75
123,456.00
123,456,123,456.78
Run Code Online (Sandbox Code Playgroud)

虽然我设置了#,###.00掩码,但它也成功地格式化了更长的值.请注意,结果中的逗号(,)分隔符取决于您的语言环境.对于俄语语言环境,它可能只是space().

  • 如果您希望零显示为0.00(而不是.00),请使用模式"#,## 0.00". (16认同)

dem*_*lem 33

另一种对给定情况有意义的方法是

BigDecimal newBD = oldBD.setScale(2);
Run Code Online (Sandbox Code Playgroud)

我只是这样说,因为在某些情况下,当涉及超过2位小数的钱时没有意义.更进一步,这可能会导致

String displayString = oldBD.setScale(2).toPlainString();
Run Code Online (Sandbox Code Playgroud)

但我只是想突出显示setScale方法(它还可以采用第二个舍入模式参数来控制最后一个小数位的处理方式.在某些情况下,Java会强制您指定此舍入方法).


小智 11

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

 System.out.printf("%.2f",pi);
Run Code Online (Sandbox Code Playgroud)

//打印3.14

System.out.printf("%.0f",pi4);
Run Code Online (Sandbox Code Playgroud)

//打印13


vol*_*ovs 9

类似于@Jeff_Alieffson 的回答,但不依赖于 default Locale

使用DecimalFormatSymbols显式的语言环境:

DecimalFormatSymbols decimalFormatSymbols  = DecimalFormatSymbols.getInstance(new Locale("ru", "RU"));
Run Code Online (Sandbox Code Playgroud)

或显式分隔符:

DecimalFormatSymbols decimalFormatSymbols = new DecimalFormatSymbols();
decimalFormatSymbols.setDecimalSeparator('.');
decimalFormatSymbols.setGroupingSeparator(' ');
Run Code Online (Sandbox Code Playgroud)

然后:

new DecimalFormat("#,##0.00", decimalFormatSymbols).format(new BigDecimal("12345"));
Run Code Online (Sandbox Code Playgroud)

结果:

12 345.00
Run Code Online (Sandbox Code Playgroud)