修改 NumberFormat.getCurrencyInstance() 返回的 NumberFormat
Posted
技术标签:
【中文标题】修改 NumberFormat.getCurrencyInstance() 返回的 NumberFormat【英文标题】:Modifying the NumberFormat returned by NumberFormat.getCurrencyInstance() 【发布时间】:2012-12-24 15:54:39 【问题描述】:在 Java 中格式化货币时遇到问题。我正在尝试格式化要打印为货币的数字,所有小数点对齐:
£ 1.23
£ 12.34
£123.45
调用NumberFormat.getCurrencyInstance().format(n)
会返回一个格式化的字符串,但是所有的数字都是左对齐的,输出如下:
£1.23
£12.34
£123.45
丑陋。我已经阅读了this post,它提供了一个使用DecimalFormat
的解决方案,作为权宜之计,我正在使用 DecimalFormat 格式化我的数字并稍后添加货币符号,但我想知道是否有人知道一种更简洁的完成方式一样的吗?
希望一切都清楚,提前感谢您的帮助!
【问题讨论】:
很难以便携的方式进行。首先,因为 NumberFormat 事先不知道它将在未来格式化的数字的最大长度是多少。其次,因为在某些地区,货币符号出现在金额之后,而不是之前。您必须实施自己的解决方案。 【参考方案1】:你可以这样做:
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。
【讨论】:
这看起来就是这样!目前,我只需要始终将货币符号放在价值之前,无论如何 - 非常有帮助,谢谢:)【参考方案2】:试试这个:
final NumberFormat nf = NumberFormat.getCurrencyInstance();
nf.setMinimumIntegerDigits(3);
System.out.println(nf.format(1.23));
System.out.println(nf.format(12.34));
System.out.println(nf.format(123.45));
【讨论】:
以上是关于修改 NumberFormat.getCurrencyInstance() 返回的 NumberFormat的主要内容,如果未能解决你的问题,请参考以下文章