我有一个代表钱的BigDecimal
字段amount
,我需要在浏览器中以$123.00
, $15.50
,等格式打印其值$0.33
。
我怎样才能做到这一点?
(我自己看到的唯一简单的解决方案是floatValue
从中获取BigDecimal
然后NumberFormat
用于使分数部分达到两位数精度)。
我有一个代表钱的BigDecimal
字段amount
,我需要在浏览器中以$123.00
, $15.50
,等格式打印其值$0.33
。
我怎样才能做到这一点?
(我自己看到的唯一简单的解决方案是floatValue
从中获取BigDecimal
然后NumberFormat
用于使分数部分达到两位数精度)。
要设置千位分隔符,假设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 newBD = oldBD.setScale(2);
我之所以这么说,是因为在某些情况下,超过 2 位小数的钱是没有意义的。更进一步,这可能会导致
String displayString = oldBD.setScale(2).toPlainString();
但我只是想强调 setScale 方法(它也可以采用第二个舍入模式参数来控制最后一个小数位的处理方式。在某些情况下,Java 强制您指定此舍入方法)。
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
BigDecimal(19.0001).setScale(2, BigDecimal.RoundingMode.DOWN)
我知道这个问题很老了,但我最近在我的 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
public static String currencyFormat(BigDecimal n) { return NumberFormat.getCurrencyInstance().format(n); }
它将使用您的 JVM 当前默认值
Locale
来选择您的货币符号。或者您可以指定一个Locale
.有关更多信息,请参阅
NumberFormat
类。