Код валюты для отображения символа валюты - PullRequest
13 голосов
/ 08 октября 2010

Добрый день, В базе данных есть таблица с записями о продаже домов. Для каждой домашней записи есть поле кода валюты (в формате ISO 4217). Возможно ли как-то получить символ валюты из этого кода, чтобы я мог использовать его на стороне презентации?

Спасибо.

P.S. Попытка решить эту проблему, установив объект Currency (созданный Currency.getInstance (currencyCode)) в метод setCurrency DecimalNumberFormat, а затем отформатировать значение, которое мне нужно было отобразить, но отформатированное значение по-прежнему без символа валюты.

Ответы [ 6 ]

13 голосов
/ 08 октября 2010

@ artjomka

Мне удалось воспроизвести вашу проблему, установив в качестве локали по умолчанию значение «Латвия»

Locale.setDefault(new Locale("lv","LV"));
Currency c  = Currency.getInstance("EUR");
System.out.println(c.getSymbol());

Это дало мне вывод «EUR».

Однако, оставив настройку моей локали в Великобритании (уже по умолчанию), я получаю символ евро (€).

Locale.setDefault(Locale.UK);
Currency c  = Currency.getInstance("EUR");
System.out.println(c.getSymbol());
9 голосов
/ 08 октября 2010

Вы можете использовать Currency метод объекта getSymbol .

Какой символ используется, зависит от используемой локали См. this и this.

Обновление, январь 2016 г .: Ссылки теперь не работают.Но они были специфичны для Java 1.4 / 5, поэтому больше не актуальны.Более подробную информацию о форматировании валюты можно найти в https://docs.oracle.com/javase/tutorial/i18n/format/numberFormat.html. Ссылки можно найти на WayBackEngine, хотя.

3 голосов
/ 08 октября 2010

Вы можете использовать класс Currency и класс DecimalFormat для достижения ваших требований.В следующем примере # представляет число, а ¤ представляет символ валюты, вы можете найти соответствующие параметры формата в документе API Java для DecimalFormat class.

        Currency currency = Currency.getInstance("USD");

        DecimalFormat decimalFormat = new DecimalFormat("#¤");
        decimalFormat.setCurrency(currency);
        System.out.println(decimalFormat.format(234));
1 голос
/ 24 июля 2015

Вы должны вызвать Currency.getSymbol(Locale) вместо Currency.getSymbol() (без объекта локали). Установка языка по умолчанию дает вам поведение, которое вы хотите.

0 голосов
/ 06 сентября 2016

Существует код-фрагмент в https://stackoverflow.com/a/15343675/702345

Но будьте осторожны:

  • Одна валюта может иметь несколько символов.Например: USD также имеет символ «US $» для локального «es_US» (по крайней мере, на Java8, Win7 на моей виртуальной машине)
  • Разница Валюты могут иметь одинаковые символы, например: USD, AUD
0 голосов
/ 31 августа 2015

Никогда не добавляйте символы валюты вслепую (предполагается, что добавление - это соответствующая локали позиция символа валюты).Небезопасная практика.То же самое со строкой "# ¤" (для локалей с префиксным символом валюты это неверно)

...