2016-03-28 24 views
24

Tôi muốn lấy biểu tượng tiền tệ (như $ hoặc £) theo tên tiền tệ (như USD hoặc EUR ).Cách lấy ký hiệu tiền tệ theo tên tiền tệ?

Đối English (US) Tôi có thể nhận được biểu tượng (nếu English (US) thiết lập như là ngôn ngữ trên thiết bị):

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

Làm thế nào tôi có thể nhận được biểu tượng cho tiền tệ theo tên tiền tệ sử dụng công cụ android -

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

lưu ý rằng các ký hiệu tiền tệ không phải luôn luôn đưa vào trước khi giá trị tiền trong các ngôn ngữ khác, vì vậy nó là tốt hơn để định dạng giá trị tiền tệ –

Trả lời

20

Bạn có thể thử một số như thế này:

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 bạn có thể thử cập nhật của tôi có lẽ đây là giải pháp tốt hơn cho trường hợp của bạn. –

3

Tôi đã giải quyết vấn đề này để tạo Bản đồ có khóa là mã tiền tệ và giá trị là biểu tượng.

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

Sau đó, bạn có thể lấy biểu tượng bằng cách sử dụng Locale, như thế này.

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

biểu tượng tệ phụ thuộc vào địa điểm. Dấu $ tương tự có nghĩa là các loại tiền tệ khác nhau ở Hoa Kỳ và Úc. Vì vậy, để có được biểu tượng chính xác, bạn phải cung cấp cá thể Locale. Nếu không, một miền địa phương mặc định sẽ được áp dụng, điều này sẽ dẫn đến các giá trị khác nhau cho các thiết bị khác nhau.

Locale uk = new Locale("en", "GB"); 
    Currency pound = Currency.getInstance("GBP"); 
    pound.getSymbol(uk); 
Các vấn đề liên quan