在Java中格式化货币时遇到问题。我正在尝试格式化数字以将其打印为货币,并对齐所有小数点:

£  1.23
£ 12.34
£123.45


调用NumberFormat.getCurrencyInstance().format(n)返回格式化的字符串,但是所有数字都左对齐,产生如下输出:

£1.23
£12.34
£123.45


丑陋。我已经阅读过this post,其中提供了使用DecimalFormat的解决方案,并且权宜之计是使用DecimalFormat格式化我的数字并在以后添加货币符号,但是我想知道是否有人意识到完成这一过程的更巧妙的方法同样的事情?

希望一切都清楚,在此先感谢您的帮助!

最佳答案

您可以这样做:

String currencySymbol = Currency.getInstance(Locale.getDefault()).getSymbol();
System.out.printf("%s%8.2f\n", currencySymbol, 1.23);
System.out.printf("%s%8.2f\n", currencySymbol, 12.34);
System.out.printf("%s%8.2f\n", currencySymbol, 123.45);


注意:这仅适用于符号出现在金额之前的货币。

还要警惕doubles are not suitable for representing currency的事实。

10-06 02:05