У меня есть код валюты (например: USD, EUR, INR) из ответа webservice. Мне нужно показать символы валюты для соответствующего кода валюты. Если код валюты - доллар США, мне нужно показать $, если код валюты - EUR, мне нужно показать €. Как я могу это сделать? Пожалуйста, предложите любую идею или образец кода для этого. Пожалуйста, помогите мне. Спасибо заранее.
Как я могу получить символы валюты из кода валюты в iphone?
Ответ 1
Этот код работает в моем проекте. Я расскажу об этом всем вам.
NSString *currencyCode = @"EUR";
NSLocale *locale = [[[NSLocale alloc] initWithLocaleIdentifier:currencyCode] autorelease];
NSString *currencySymbol = [NSString stringWithFormat:@"%@",[locale displayNameForKey:NSLocaleCurrencySymbol value:currencyCode]];
NSLog(@"Currency Symbol : %@", currencySymbol);
Спасибо.
Ответ 2
Этот код является тем, что вы ищете, хотя и не очень эффективным из-за цикла для локалей. Тем не менее он работает правильно для всех кодов валют, а не только для eur или usd. Надеюсь, это поможет вам.
- (NSLocale *) findLocaleByCurrencyCode:(NSString *)_currencyCode
{
NSArray *locales = [NSLocale availableLocaleIdentifiers];
NSLocale *locale = nil;
for (NSString *localeId in locales) {
locale = [[[NSLocale alloc] initWithLocaleIdentifier:localeId] autorelease];
NSString *code = [locale objectForKey:NSLocaleCurrencyCode];
if ([code isEqualToString:_currencyCode])
break;
else
locale = nil;
}
return locale;
}
- (NSString *)findCurrencySymbolByCode:(NSString *)_currencyCode
{
NSNumberFormatter *fmtr = [[NSNumberFormatter alloc] init];
NSLocale *locale = [self findLocaleByCurrencyCode:_currencyCode];
NSString *currencySymbol;
if (locale)
[fmtr setLocale:locale];
[fmtr setNumberStyle:NSNumberFormatterCurrencyStyle];
currencySymbol = [fmtr currencySymbol];
[fmtr release];
if (currencySymbol.length > 1)
currencySymbol = [currencySymbol substringToIndex:1];
return currencySymbol;
}
Используйте его следующим образом:
NSString *currencySymbol = [self findCurrencySymbolByCode:currencyCode];
Ответ 3
NSLocale
с радостью сообщит вам символ валюты, используемый определенным языком:
[locale objectForKey:NSLocaleCurrencySymbol];
Он также укажет вам код валюты:
[locale objectForKey:NSLocaleCurrencyCode];
Итак, теперь вам нужно искать язык, соответствующий данному коду. Там нет встроенного метода (который я знаю), чтобы сделать это напрямую, поэтому пройдите все известные локали и выберите тот, который соответствует. @Umka answer имеет хороший пример этого в методе -findLocaleByCurrencyCode:
.
Вы можете оптимизировать процесс, создав свою собственную таблицу поиска, а не повторяя все локали каждый раз. Возможно, вам также придется обрабатывать возможность дублирования кодов валют, что потребует некоторой эвристики для принятия решения о том, какой из них наиболее вероятен.
Ответ 4
версия Swift 4
Поиск локали по коду валюты:
let localeGBP = Locale
.availableIdentifiers
.map { Locale(identifier: $0) }
.first { $0.currencyCode == "GBP" }
print(localeGBP?.currencySymbol) // £
Форматирование валюты
if let locale = localeGBP {
let formatter = NumberFormatter()
formatter.numberStyle = .currency
formatter.locale = locale
let result = formatter.string(from: 100000) // £100,000.00
}
Ответ 5
Построение кода из @Mike Abdullah и @Umka, вот некоторые функции в Swift.
func findCodeAndSymbolForAllLocales() {
let locales = NSLocale.availableLocaleIdentifiers()
for localeId in locales {
let locale = NSLocale(localeIdentifier: localeId)
if let code = locale.objectForKey(NSLocaleCurrencyCode) as? String,
let symbol = locale.objectForKey(NSLocaleCurrencySymbol) {
print("\(code) \(symbol)")
}
}
}
func findCurrencySymbolByCode(currencyCode:String) -> String? {
guard let locale = findLocaleByCurrencyCode(currencyCode) else {
print("locale for \(currencyCode) is nil")
return nil
}
return locale.objectForKey(NSLocaleCurrencySymbol) as? String
}
func findLocaleByCurrencyCode(currencyCode:String) -> NSLocale? {
let locales = NSLocale.availableLocaleIdentifiers()
var locale:NSLocale?
for localeId in locales {
locale = NSLocale(localeIdentifier: localeId)
if let code = locale!.objectForKey(NSLocaleCurrencyCode) as? String {
if code == currencyCode {
return locale
}
}
}
return locale
}
Ответ 6
NSNumberFormatter * formatter = [NSNumberFormatter new];
formatter.numberStyle = NSNumberFormatterCurrencyStyle;
NSString * localeIde = [NSLocale localeIdentifierFromComponents:@{NSLocaleCurrencyCode: currencyCode}];
formatter.locale = [NSLocale localeWithLocaleIdentifier:localeIde];
NSString * symbol = formatter.currencySymbol;
Ответ 7
Свифта
let locale = NSLocale(localeIdentifier: currencyCode)
let currencySymbol = locale.displayName(forKey: .currencySymbol, value: currencyCode) ?? currencyCode
print("Currency symbol: \(currencySymbol)")
Ответ 8
NSNumberFormatter *currencyFormatter = [[NSNumberFormatter alloc] init];
[currencyFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];
это для стиля американской валюты
NSNumberFormatter *numberFormatter = [[[NSNumberFormatter alloc] init] autorelease];
//[numberFormatter setCurrencySymbol:@"Rs"];
[numberFormatter setNumberStyle:@"en_IN"];
Это для indian