2016-02-11 5 views
1

Как я могу использовать «R» для валюты, когда языковой стандарт установлен в Южную Африку?Используйте «R» вместо «ZAR» для южноафриканской валюты

В настоящее время он показывает «ZAR», и мне нужно, чтобы он отображал «R».

Я пробовал:

final Currency curr = Currency.getInstance("ZAR"); 
final NumberFormat nf = NumberFormat.getCurrencyInstance(Locale.getDefault()); 
nf.setCurrency(curr); 
final String value = nf.format(12345.67); 

, а затем, как только все это будет сделано, я заменил ZAR с R using.replace();

ответ

0

Ok Я нашел отличный пример, который работает:

 public static SortedMap<Currency, Locale> currencyLocaleMap; 
    static { 
    currencyLocaleMap = new TreeMap<Currency, Locale>(new Comparator<Currency>() { 
     public int compare(Currency c1, Currency c2){ 
     return c1.getCurrencyCode().compareTo(c2.getCurrencyCode()); 
     } 
    }); 
    for (Locale locale : Locale.getAvailableLocales()) { 
     try { 
     Currency currency = Currency.getInstance(locale); 
     currencyLocaleMap.put(currency, locale); 
     }catch (Exception e){ 
     } 
    } 
    } 

    public static String getCurrencySymbol(String currencyCode) { 
    Currency currency = Currency.getInstance(currencyCode); 
    System.out.println(currencyCode+ ":-" + currency.getSymbol(currencyLocaleMap.get(currency))); 
    return currency.getSymbol(currencyLocaleMap.get(currency)); 
    } 

здесь: Not getting currency symbols for specific Locale

0

Создайте свой собственный класс NumberFormat (который расширяет Java) и реализует собственную версию format; вызов функции базового класса для всех валют, кроме ZAR.

Подход, который вы в настоящее время принимаете, будет приводить к многому повторяемому (и неинкапсулированному) коду.

+0

Спасибо, есть какие-либо библиотеки там, которые могли бы сделать это уже? – x10sion

+0

Это довольно специфическое (и, смею сказать, идиосинкратическое) требование, поэтому я сомневаюсь в этом. Мой подход - всего лишь дюжина строк кода. – Bathsheba

1

NumberFormat класса форматирует число, основанное на местности, который передается как пары. Если локаль для Южной Африки (new Locale("en", "ZA")), то число будет отображаться корректно: R 12,345.67

final Currency curr = Currency.getInstance("ZAR"); 
final NumberFormat nf = NumberFormat.getCurrencyInstance(new Locale("en", "ZA")); 
nf.setCurrency(curr); 
final String value = nf.format(12345.67); 
System.out.println(value);