2016-03-28 14 views
24

Я хочу, чтобы получить символ валюты (например, $ или £) по названию валюты (как USD или EUR).Как получить символ валюты по названию валюты?

Для английского (США) я могу получить символ (если английский (США) установлен в качестве языка на устройстве):

Currency currency = Currency.getInstance(Locale.getDefault()); 
String symbol = currency.getSymbol()); // $ 

Как я могу получить символ для валюты по названию валюты с помощью андроид инструменты -

someMethod (String currCode) { // currCode - USD, EUR, UAH 
    return currSymbol;  // $... 
} 
+6

отмечает, что символ валюты не всегда ставятся в перед значением денег на других языках, так что лучше форматировать значение валюты –

ответ

20

Вы можете попробовать так:

public class MainActivity extends AppCompatActivity { 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     Utils.getCurrencySymbol(Currency.getInstance(Locale.US).getCurrencyCode()); 
     Utils.getCurrencySymbol(Currency.getInstance(Locale.JAPAN).getCurrencyCode()); 
     Utils.getCurrencySymbol(Currency.getInstance(Locale.UK).getCurrencyCode()); 

     //for your case that you want to get Euro symbol because France are with Euro symnol  
     Utils.getCurrencySymbol(Currency.getInstance(Locale.FRANCE).getCurrencyCode()); 
     //you can get symbol also if you write string of your desired currency 
     Utils.getCurrencySymbol("INR"); 


    } 


    static class Utils { 
     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)); 
     } 

    } 
} 
+2

@Shevchenko Arthem вы можете попробовать мое обновление, возможно, это лучшее решение для Вашего случая. –

3

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

public final Map<String, String> CURRENCIES= new HashMap<String, String>(){ 
     { 
      put("EUR","€"); 
      put("USD","$"); 
      ... 
     } 
}; 

Затем вы можете получить символ, используя локаль, как это.

Currency currency = Currency.getInstance(Locale.getDefault()); 
String symbol = CURRENCIES.get(currency.getCurrencyCode()); 
9

символ валюты зависит от местоположения. Тот же знак $ означает разные валюты в США и Австралии. Итак, чтобы получить правильный символ, вы должны предоставить экземпляр Locale. В противном случае будет применяться локаль по умолчанию, что приведет к разным значениям для разных устройств.

Locale uk = new Locale("en", "GB"); 
    Currency pound = Currency.getInstance("GBP"); 
    pound.getSymbol(uk); 
Смежные вопросы