2016-02-12 123 views
1

爲最終用戶提供貨幣列表。他們可以隨時選擇他們的興趣之一。因此,java.text.NumberFormat中使用的語言環境需要根據所選貨幣進行更改。這似乎並不重要。根據動態貨幣值動態更改區域設置

Locale locale = new Locale("en", "US"); 
NumberFormat decimalFormat = NumberFormat.getCurrencyInstance(locale); 
decimalFormat.setGroupingUsed(true); 
decimalFormat.setCurrency(Currency.getInstance("USD")); 

System.out.println(decimalFormat.format(BigDecimal.valueOf(1.12))); 

上面的代碼將顯示正確的貨幣值$1.12。由於貨幣(和區域設置)是根據用戶的偏好在運行時動態確定的,因此如果USD更改爲與GBP不同的內容,則相關區域設置也需要從en_US更改爲en_GB。否則,它將顯示GBP1.12,其中£1.12預計(爲簡潔起見,匯率除外)。

有沒有一種方法可以根據在運行時動態提供的貨幣代碼來確定區域設置?

回答

2

如果您只支持數量有限的貨幣,那麼您最好手動創建映射。否則,這將會很困難,因爲每種貨幣都有多個有效區域設置。例如美元可en_USes_USes_PRes_EC ...

你可以看一下Currency.getInstance(locale)所有Locale.availableLocales()獲得一個想法:

for (Locale locale : Locale.getAvailableLocales()) { 
    try { 
    Currency c = Currency.getInstance(locale); 
    System.out.println(c + "\t" + locale); 
    } catch (IllegalArgumentException ignore) { } 
}