Java: возможно ли преобразование валюты в локаль? - PullRequest
18 голосов
/ 17 апреля 2009

У меня есть значение, хранящееся в БД, соответствующее денежной сумме, скажем, 10.0. У меня также есть доступ к Currency / CurrencyCode. Как я могу использовать NumberFormat / DecimalFormat / (other?) Для форматирования, когда я не знаю Locale? Согласно документам он выберет локаль по умолчанию, которая не будет работать с иностранной валютой.

Ответы [ 5 ]

25 голосов
/ 20 мая 2011

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);
17 голосов
/ 17 апреля 2009

Правильное поведение, вообще говоря, состоит в том, чтобы отформатировать сумму в предпочтительном для пользователя языковом стандарте, а не в типичном для валюты. На стороне клиента у вас будут предпочтения пользователя (Locale.getDefault ()); если вы делаете что-то на стороне веб-сервера, используйте Accept-Language или, предпочтительно, локаль содержимого страницы, чтобы получить правильную локаль.

Аргументация такова: Пользователь из Англии и США поймет € 10 000 000,15, но не эквивалентный для Германии эквивалент, € 10 000 000,15

Валюта сама по себе не содержит достаточно информации, чтобы вывести подходящую локаль, так или иначе.

2 голосов
/ 17 апреля 2009

Что делать, если код валюты - евро? И, хотя он потерпел поражение, доллар все еще используется во всем мире. Вывод локали из кода валюты кажется ненадежным. Можете ли вы вместо этого ввести явное предпочтение пользователя для локали?

Информация, которую вы ищете, не является частью встроенной базы данных валют Java, поэтому для нее нет API. Вы можете создать свою собственную таблицу для многих однозначных случаев.

0 голосов
/ 28 июня 2016

Вот способ определения локали по коду валюты

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)
0 голосов
/ 17 апреля 2009

Я бы сказал, что если ваша база данных хранит значение валюты, она должна висеть на единицах одновременно. Похоже, вы делаете это сейчас. Можете ли вы добавить локаль в базу данных одновременно? Может быть достойным решением.

...