修改 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的主要内容,如果未能解决你的问题,请参考以下文章

怎么修改文件修改日期

电脑文件修改时间和实际修改时间不一样

ce修改器使用方法

Sql Server 增加字段修改字段修改类型修改默认值(转)

网卡MAC怎么修改

关于windows 2003域控账户修改密码问题,客户端账号过期的时候修改密码提示“您无权修改密码”。