如何使用Java的DecimalFormat进行“智能”货币格式化?

2022-09-01 10:50:16

我想使用Java的DecimalFormat来格式化替身,如下所示:

#1 - 100 -> $100
#2 - 100.5 -> $100.50
#3 - 100.41 -> $100.41

到目前为止,我能想到的最好的是:

new DecimalFormat("'$'0.##");

但这不适用于情况#2,而是输出“$ 100.5”

编辑:

这些答案中的很多都只考虑了案例#2和#3,而没有意识到他们的解决方案将导致#1将100格式化为“$ 100.00”而不仅仅是“$ 100”。


答案 1

它必须使用吗?DecimalFormat

如果没有,看起来以下内容应该有效:

String currencyString = NumberFormat.getCurrencyInstance().format(currencyNumber);
//Handle the weird exception of formatting whole dollar amounts with no decimal
currencyString = currencyString.replaceAll("\\.00", "");

答案 2

使用数字格式:

NumberFormat n = NumberFormat.getCurrencyInstance(Locale.US); 
double doublePayment = 100.13;
String s = n.format(doublePayment);
System.out.println(s);

此外,不要使用双精度值来表示确切的值。如果您以蒙特卡罗方法(其中的值无论如何都不精确)使用货币值,则最好使用双精度。

另请参见:编写 Java 程序来计算货币并设置其格式


推荐