2012-01-03 4 views
22

У меня есть код валюты (например: USD, EUR, INR) из ответа webservice. Мне нужно показать символы валюты для соответствующего кода валюты. Если код валюты - доллар США, мне нужно показать $, если код валюты - EUR, мне нужно показать €. Как я могу это сделать? Пожалуйста, предложите любую идею или образец кода для этого. Пожалуйста, помогите мне. Заранее спасибо.Как я могу получить символы валюты из кода валюты в iphone?

ответ

17

Этот код работает шарм в моем проекте. Я расскажу об этом всем вам.

NSString *currencyCode = @"EUR"; 
    NSLocale *locale = [[[NSLocale alloc] initWithLocaleIdentifier:currencyCode] autorelease]; 
    NSString *currencySymbol = [NSString stringWithFormat:@"%@",[locale displayNameForKey:NSLocaleCurrencySymbol value:currencyCode]]; 
    NSLog(@"Currency Symbol : %@", currencySymbol); 

Спасибо.

+3

Я не думаю, что этот код работает по своему желанию.Он показывает правильные символы валюты только для eur и usd. Для всех других валют он отображает первый символ для кода валюты. –

+0

Этот код кажется волшебным, непонятно, почему он делает то, что он делает. Если вы измените третью строку так, чтобы она печатала '[locale objectForKey: NSLocaleCurrencySymbol]', на выходе выводится символ «Currency Symbol: ¤'. – dteoh

+2

этот код работает корректно только для EUR и USD, другие не работают хорошо для меня. –

-1
NSNumberFormatter *currencyFormatter = [[NSNumberFormatter alloc] init]; 
    [currencyFormatter setNumberStyle:NSNumberFormatterCurrencyStyle]; 

это для валюты США стиль

NSNumberFormatter *numberFormatter = [[[NSNumberFormatter alloc] init] autorelease]; 
    //[numberFormatter setCurrencySymbol:@"Rs"];   
    [numberFormatter setNumberStyle:@"en_IN"]; 

Это для индийской

+0

Спасибо за ваш ответ. Не могли бы вы рассказать мне об этом? Я не понимаю ваш ответ. Не ошибетесь. Благодарю. –

12

Этот код является тем, что вы ищете, хотя и не очень эффективным из-за цикла для локалей. Тем не менее он работает правильно для всех кодов валют, а не только для 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]; 
+2

Этот код имеет некоторые неприятные недостатки: если 'NSNumberFormatter' решает не помещать символ валюты в первую очередь на выходе, вы получите неверный результат. Если символ валюты занимает более одного кодового слова UTF-16, он будет отрублен и недействителен. –

+0

Улучшите его и разрешите другим использовать. Разве это не сайт?) и спасибо. –

+0

Действительно. Опубликован улучшенный ответ. –

10

NSLocale радостью расскажет вам символ валюты, используемой в конкретной местности:

[locale objectForKey:NSLocaleCurrencySymbol]; 

Это будет также сказать вам код валюты:

[locale objectForKey:NSLocaleCurrencyCode]; 

Итак, теперь вам нужно искать язык, соответствующий данному коду. Нет встроенного метода (который я знаю), чтобы сделать это напрямую, поэтому пройдите по всем известным локалям и выберите тот, который соответствует. @ Умка answer имеет хороший пример этого в методе -findLocaleByCurrencyCode:.

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

3
NSNumberFormatter * formatter = [NSNumberFormatter new]; 
formatter.numberStyle = NSNumberFormatterCurrencyStyle; 

NSString * localeIde = [NSLocale localeIdentifierFromComponents:@{NSLocaleCurrencyCode: currencyCode}]; 
formatter.locale = [NSLocale localeWithLocaleIdentifier:localeIde]; 

NSString * symbol = formatter.currencySymbol; 
4

Основываясь на коде от @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 
} 
7

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 
} 
0

Swift

let locale = NSLocale(localeIdentifier: currencyCode) 
let currencySymbol = locale.displayName(forKey: .currencySymbol, value: currencyCode) ?? currencyCode 
print("Currency symbol: \(currencySymbol)") 
Смежные вопросы