2016-03-28 108 views
24

我希望得到的貨幣符號(如$£)的貨幣名稱(如美元EUR)。如何通過貨幣名稱獲取貨幣符號?

對於英語(美國),我可以得到符號(如英語(美國)設置爲對設備語言):

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

如何可以使用Android的工具,我得到符號貨幣通過貨幣名稱 -

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

我已經解決了這個問題,創建一個具有關鍵字的Map是貨幣代碼,值是符號。

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

然後,您可以通過使用Locale來獲得符號,就像這樣。

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