我有BigDecimal
字段amount
代表金钱,我需要在浏览器中以$123.00
,$15.50
,{{1}的格式打印其值}}
我该怎么做?
(我认为自己唯一的简单解决方案是从$0.33
获取floatValue
,然后使用BigDecimal
为小数部分制作两位数的精度。
答案 0 :(得分:114)
public static String currencyFormat(BigDecimal n) {
return NumberFormat.getCurrencyInstance().format(n);
}
它将使用您的区域设置选择您的货币符号。 NumberFormat's javadoc
答案 1 :(得分:54)
要设置千位分隔符,请说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()。
答案 2 :(得分:33)
另一种对给定情况有意义的方法是
BigDecimal newBD = oldBD.setScale(2);
我只是这样说,因为在某些情况下当涉及超过2位小数的钱时没有意义。更进一步,这可能会导致
String displayString = oldBD.setScale(2).toPlainString();
但我只是想突出显示setScale方法(它还可以采用第二个舍入模式参数来控制最后一个小数位的处理方式。在某些情况下,Java会强制您指定这种舍入方法。)
答案 3 :(得分:9)
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
答案 4 :(得分:1)
BigDecimal(19.0001).setScale(2, BigDecimal.RoundingMode.DOWN)
答案 5 :(得分:1)
与@Jeff_Alieffson类似,但不依赖默认的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
答案 6 :(得分:0)
我知道这个问题很老了,但我最近在我的 kotlin 应用程序中做了类似的事情。所以这里有一个例子,如果有人需要的话:
val dfs = DecimalFormatSymbols.getInstance(Locale.getDefault())
val bigD = BigDecimal("1e+30")
val formattedBigD = DecimalFormat("#,##0.#",dfs).format(bigD)
结果显示 $formattedBigD:
1,000,000,000,000,000,000,000,000,000,000