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);
}
它将使用您的区域设置来选择您的货币符号. 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)));
结果如下:
123,456.75
123,456.00
123,456,123,456.78
虽然我设置了#,###.00掩码,但它也成功地格式化了更长的值.请注意,结果中的逗号(,)分隔符取决于您的语言环境.对于俄语语言环境,它可能只是space().
dem*_*lem 33
另一种对给定情况有意义的方法是
BigDecimal newBD = oldBD.setScale(2);
我只是这样说,因为在某些情况下,当涉及超过2位小数的钱时没有意义.更进一步,这可能会导致
String displayString = oldBD.setScale(2).toPlainString();
但我只是想突出显示setScale方法(它还可以采用第二个舍入模式参数来控制最后一个小数位的处理方式.在某些情况下,Java会强制您指定此舍入方法).
小智 11
 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
类似于@Jeff_Alieffson 的回答,但不依赖于 default Locale:
使用DecimalFormatSymbols显式的语言环境:
DecimalFormatSymbols decimalFormatSymbols  = DecimalFormatSymbols.getInstance(new Locale("ru", "RU"));
或显式分隔符:
DecimalFormatSymbols decimalFormatSymbols = new DecimalFormatSymbols();
decimalFormatSymbols.setDecimalSeparator('.');
decimalFormatSymbols.setGroupingSeparator(' ');
然后:
new DecimalFormat("#,##0.00", decimalFormatSymbols).format(new BigDecimal("12345"));
结果:
12 345.00