2009-04-16 73 views
15

我有存儲在一個數據庫相關的貨幣量的值,說10.0。我也可以訪問貨幣/貨幣代碼。我如何使用的NumberFormat/DecimalFormat的/(其他?)我不知道的Locale格式化?根據文檔,它將選擇一個默認語言環境,該語言環境不適用於外幣。Java:貨幣到區域設置映射可能嗎?

回答

15

一般來說,正確的行爲是格式化用戶首選語言環境中的金額,而不是貨幣的典型語言環境。在客戶端,您將擁有用戶的偏好(Locale.getDefault());如果你正在做的網站服務器端的東西,使用接受語言,或最好,頁面內容的語言環境,以獲得正確的語言環境。

原因是這樣的: 的英語(美國)的用戶會明白€10,000,000.15但不是適合換德國相當於€10.000.000,15

貨幣本身不包含足夠的信息來推斷無論如何,這是一個合適的區域。

2

如果貨幣代碼是EUR什麼?而且,雖然它已經受到打擊,但美元仍然在全世界使用。從貨幣代碼推斷區域設置似乎不可靠。你能介紹一個明確的用戶偏好的語言環境嗎?

你正在尋找的信息不是內置Java數據庫貨幣的一部分,所以沒有爲它的API。對於許多毫不含糊的情況,你可以使用create your own table

0

我要說的是,如果您的數據庫存儲的幣值應該掛到單位在同一時間。聽起來你現在正在這樣做。您可以同時將區域設置添加到數據庫嗎?可能是一個體面的解決方案

23

JasonTrue是正確的,但是你可以重寫NumberFormat的語言環境的貨幣:

NumberFormat numberFormat = NumberFormat.getCurrencyInstance(locale); 
//the user may have selected a different currency than the default for their locale 
Currency currency = Currency.getInstance("GBP"); 
numberFormat.setCurrency(currency); 
numberFormat.format(amount); 
0

這裏有一個方法來確定從貨幣代碼

let locale = NSLocale(localeIdentifier: NSLocale.canonicalLocaleIdentifierFromString(NSLocale.localeIdentifierFromComponents([NSLocaleCurrencyCode: currencyCode]))) 

let formatter = NSNumberFormatter() 
formatter.numberStyle = .CurrencyStyle 
formatter.currencyCode = currencyCode 
formatter.locale = locale 
formatter.maximumFractionDigits = 2 
formatter.stringFromNumber(number) 
的語言環境