Как отформатировать BigDecimal как валюту без символа в Play Framework (или Java)?

Я хочу отформатировать BigDecimal как валюту в одной локали, но использовать символ валюты другой. В данном конкретном случае это шведский пользователь, но сумма указана в евро.

Я надеюсь, что вы можете показать мне лучший способ, чем этот:

public String getFormattedAmount()
{
    Locale.setDefault(new Locale(currentUser.getLocale()));
    NumberFormat nf = NumberFormat.getCurrencyInstance();
    DecimalFormatSymbols decimalFormatSymbols = ((DecimalFormat) nf).getDecimalFormatSymbols();
    decimalFormatSymbols.setCurrencySymbol("");
    ((DecimalFormat) nf).setDecimalFormatSymbols(decimalFormatSymbols);
    return nf.format(amount).trim();
}

Игра 2.2.


person Jonas Elfström    schedule 05.11.2014    source источник
comment
Уважаемые Близкие избиратели, Подобный вопрос не имеет ничего общего с Play Framework. В прежнем языке шаблонов Play был ${ 42.formatCurrency('EUR').raw() }, но я не могу найти ничего подобного в текущем. Я подумал, что он все еще может быть там, хотя я не могу его найти.   -  person Jonas Elfström    schedule 05.11.2014


Ответы (1)


Вы можете попробовать это решение (вдохновленное этим ответом):

DecimalFormat nf = (DecimalFormat) DecimalFormat.getNumberInstance(new Locale(currentUser.getLocale()));
nf.setMinimumFractionDigits(2);
nf.setMaximumFractionDigits(2);
String formattedValue = nf.format(amout);
person cassiomolin    schedule 05.11.2014
comment
Это не справится с разделителем валютных тысяч. - person Jonas Elfström; 05.11.2014
comment
Какую локаль вы используете? Пожалуйста, покажите мне пример. - person cassiomolin; 05.11.2014
comment
Возможно, я неправильно понял ваш вопрос, но при форматировании 123456789 с использованием new Locale("sv", "SE") с вашим и моим кодом я всегда получаю 123 456 789,00. Это правильно? - person cassiomolin; 05.11.2014
comment
Это было бы правильно для десятичных значений, но для денежных сумм должно быть 123.456.789,00. - person Jonas Elfström; 05.11.2014
comment
Вы лучше меня знаете формат шведской валюты, но код DecimalFormat.getCurrencyInstance(new Locale("sv", "SE")).format(123456789) выдает 123 456 789,00 kr. Для Java десятичный разделитель — это пробел, а не точка. - person cassiomolin; 05.11.2014
comment
Это странно. NumberFormat.getCurrencyInstance() производит 123.456.789,00. - person Jonas Elfström; 05.11.2014
comment
Вы пробовали со шведской локалью? - person cassiomolin; 05.11.2014
comment
Да, но мой вопрос был не в том, чтобы заставить его работать. Мой код выше работает. Я просто надеялся, что есть более простое решение. - person Jonas Elfström; 05.11.2014
comment
Я думал, что мое решение сработает. Мне просто стало интересно узнать о различиях в форматировании. Я пробовал один и тот же код на Java 7 и Java 8, и я всегда получаю пробел вместо точки. - person cassiomolin; 05.11.2014