Подтвердить что ты не робот

Как я могу получить символы валюты из кода валюты в iphone?

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

4b9b3361

Ответ 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