Java 修改NumberFormat.getCurrencyInstance()返回的NumberFormat

Java 修改NumberFormat.getCurrencyInstance()返回的NumberFormat,java,currency-formatting,Java,Currency Formatting,我在用Java格式化货币时遇到问题。我正在尝试将一个数字格式化为货币,并将所有小数点对齐: £ 1.23 £ 12.34 £123.45 调用NumberFormat.getCurrencyInstance().format(n)返回一个格式化字符串,但所有数字都是左对齐的,产生如下输出: £1.23 £12.34 £123.45 丑陋的。我读过一篇文章,其中介绍了一种使用十进制格式的解决方案,作为权宜之计,我正在使用十进制格式格式化我的数字,并在稍后预先添加货币符号,但我想知道是否有人知

我在用Java格式化货币时遇到问题。我正在尝试将一个数字格式化为货币,并将所有小数点对齐:

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

£1.23
£12.34
£123.45
丑陋的。我读过一篇文章,其中介绍了一种使用十进制格式的解决方案,作为权宜之计,我正在使用十进制格式格式化我的数字,并在稍后预先添加货币符号,但我想知道是否有人知道一种更简洁的方法来完成同样的事情

希望一切都清楚,提前谢谢你的帮助

试试这个:

    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));
试试这个:

    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));
你可以做:

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);
注意:这仅适用于符号出现在金额之前的货币

还要注意以下事实。

您可以:

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);
注意:这仅适用于符号出现在金额之前的货币


也要注意这样一个事实。

用便携方式很难做到这一点。首先,因为NumberFormat事先不知道将来它将格式化的数字的最大长度。其次,因为在某些地区,货币符号位于金额之后,而不是之前。您必须实现自己的解决方案。这很难用可移植的方式实现。首先,因为NumberFormat事先不知道将来它将格式化的数字的最大长度。其次,因为在某些地区,货币符号位于金额之后,而不是之前。您必须实现自己的解决方案。这看起来正是问题所在!就目前而言,我将不得不忍受总是把货币符号放在价值之前,不管怎样——非常有帮助,谢谢:)这看起来正是问题所在!就目前而言,我只能接受始终将货币符号置于价值之前,不管怎样——非常有帮助,谢谢:)