Изменение NumberFormat, возвращаемого NumberFormat.getCurrencyInstance()

У меня проблема с форматированием валют в Java. Я пытаюсь отформатировать число для печати в виде валюты со всеми выровненными десятичными точками:

£  1.23
£ 12.34
£123.45

Вызов NumberFormat.getCurrencyInstance().format(n) возвращает отформатированную строку, но все числа выровнены по левому краю, что приводит к следующему результату:

£1.23
£12.34
£123.45

Уродливый. Я прочитал это сообщение, в котором представлено решение с использованием DecimalFormat, и в качестве временной меры я форматирую свой номер, используя a DecimalFormat и добавление символа валюты позже, но мне было интересно, знает ли кто-нибудь о более аккуратном способе выполнения того же самого?

Надеюсь все понятно, заранее спасибо за помощь!


person Ian Knight    schedule 24.12.2012    source источник
comment
Портативным способом это сделать сложно. Во-первых, потому что NumberFormat не знает заранее, какова будет максимальная длина чисел, которые он будет форматировать в будущем. Во-вторых, потому что в некоторых локалях знак валюты стоит после суммы, а не перед ней. Вам придется реализовать собственное решение.   -  person JB Nizet    schedule 24.12.2012


Ответы (2)


Вы можете сделать:

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);

Примечание: это будет работать только для валют, символы которых появляются перед суммой.

Также имейте в виду, что двойники не подходят для представления валюты. .

person Reimeus    schedule 24.12.2012
comment
Похоже, это самое то! На данный момент мне просто придется жить, всегда ставя символ валюты перед значением, несмотря ни на что - очень полезно, спасибо :) - person Ian Knight; 25.12.2012

Попробуй это:

    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));
person Walery Strauch    schedule 24.12.2012