Можно ли извлечь символ валюты из кода валюты? - PullRequest
6 голосов
/ 04 апреля 2010

Приложение для моего iPhone форматирует NSDecimalNumber в качестве валюты, используя setCurrencyCode, однако на другом экране отображается только символ валюты. Вместо того, чтобы хранить код валюты и символ, возможно ли извлечь символ из кода? Я думал, что следующее может работать, но он просто возвращает символ как $:

currencyCode = [dictPrices valueForKey:@"currencyCode"];
NSNumberFormatter *numberFormatter = [[[NSNumberFormatter alloc] init] autorelease];
[numberFormatter setFormatterBehavior:NSNumberFormatterBehavior10_4];
[numberFormatter setCurrencyCode:currencyCode];
[numberFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];

NSString *currencySymbol = [numberFormatter currencySymbol];

Ответы [ 5 ]

6 голосов
/ 09 марта 2013

Вы можете получить номер с символом валюты из номера с кодом валюты.

Вот как я делаю:

    NSString *currencyCode = @"HKD";
    NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
    [numberFormatter setCurrencyCode:currencyCode];
    [numberFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];

    cell.amountLabel.text = [numberFormatter stringFromNumber: expense.exAmount];
5 голосов
/ 04 апреля 2010

Вы хотите установить локаль, а не код валюты. Затем вы получите ожидаемые результаты из свойств форматеров (или подправите их). Вы также можете получить такие вещи, как символ валюты от самого объекта локали. Так, например, если вы отображали число, отформатированное для Японии в JPY:

NSLocale* japanese_japan = [[[NSLocale alloc] initWithLocaleIdentifier:@"ja_JP"] autorelease];
NSNumberFormatter *fmtr = [[[NSNumberFormatter alloc] init] autorelease];
[fmtr setNumberStyle:NSNumberFormatterCurrencyStyle];
[fmtr setLocale:japanese_japan];

Теперь ваш числовой форматер должен дать вам правильные символы для символа валюты и форматировать в соответствии с правилами в указанной локали.

0 голосов
/ 29 декабря 2014
NSNumberFormatter * formatter = [NSNumberFormatter new];
formatter.numberStyle = NSNumberFormatterCurrencyStyle;

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

NSString * symbol = formatter.currencySymbol;
0 голосов
/ 18 апреля 2014

Я бы на самом деле сделал это так. Если вы решите сделать это, как сказал SveinnV, возможно, символ находится перед цифрой 0, а затем вы просто получаете @"0" в качестве символа:

- (NSString *) currencySymbolForCurrencyCode:(NSString *) currencyCode
{

    NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
    [formatter setNumberStyle:NSNumberFormatterCurrencyStyle];
    [formatter setMaximumFractionDigits:0];

    [formatter setCurrencyCode:currencyCode];

    NSString *string = [formatter stringFromNumber:[NSNumber numberWithInt:0]];
    NSArray *components = [string componentsSeparatedByCharactersInSet:[NSCharacterSet decimalDigitCharacterSet]];

    return [components firstObject];
}
0 голосов
/ 07 июня 2013

Следующий код возвратит только currencySymbol для данного кода валюты

- (NSString*)getCurrencySymbolFromCurrencyCode:(NSString*)currencyCode {
    NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
    [formatter setNumberStyle:NSNumberFormatterCurrencyStyle];
    [formatter setCurrencyCode:currencyCode];
    [formatter setMaximumFractionDigits:0];
    NSString *string = [formatter stringFromNumber:[NSNumber numberWithInt:0]];
    [formatter release];
    return [string substringFromIndex:1];
}
...