Ошибка с NSNumberFormatter currencySymbol - PullRequest
6 голосов
/ 17 января 2012

У меня проблема с получением денежного символа моего NSNumberFormatter.
Я использую NSNumberFormatter с кодом валюты "EUR".
Когда я форматирую цены, символ правильный, я получаю символ €.
Однако когда я хочу получить только currencySymbol с помощью метода [formatter currencySymbol], возвращается символ $.
Если я вручную установлю currencySymbol (например, с «A»), все будет работать нормально, а метод [formatter currencySymbol] вернет символ «A».


Вот мой код

// Create formatter
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterCurrencyStyle];
[formatter setCurrencyCode:@"EUR"];
[formatter setLocale:[NSLocale currentLocale]];

// Log the currency symbol
NSLog(@"[formatter currencyCode] : %@", [formatter currencyCode]);
NSLog(@"[formatter currencySymbol] : %@", [formatter currencySymbol]);
NSLog(@"[formatter currencySymbol] : %@", [formatter stringFromNumber:[NSNumber numberWithInt:0]]);
[formatter setCurrencySymbol:@"A"];
NSLog(@"[formatter currencySymbol] : %@", [formatter currencySymbol]);
NSLog(@"[formatter currencySymbol] : %@", [formatter stringFromNumber:[NSNumber numberWithInt:0]]);

Вот результаты консоли:

2012-01-17 12:29:11.108[4545:207] [formatter currencySymbol] : $
2012-01-17 12:29:11.109[4545:207] [formatter currencySymbol] : €0.00
2012-01-17 12:29:11.110[4545:207] [formatter currencySymbol] : A
2012-01-17 12:29:11.111[4545:207] [formatter currencySymbol] : A0.00

Я не могу форсировать символ currencySymbol, так как он может измениться.
Есть ли способ получить правильную символику валюты, соответствующую указанному коду валюты?

Спасибо

Ответы [ 4 ]

2 голосов
/ 05 мая 2014

Чтобы получить символ валюты , вы можете использовать NSLocaleCurrencySymbol с NSLocale:

   NSLocale* locale = [NSLocale currentLocale];
   NSString* cs = [locale displayNameForKey:NSLocaleCurrencySymbol
                                 value:currencyCode];

Чтобы получить локализованное имя (' Доллар США ', ' Японская иена ', ..), вы можете использовать NSLocaleCurrencyCode:

   NSLocale* locale = [NSLocale currentLocale];
   NSString* cc = [locale displayNameForKey:NSLocaleCurrencyCode
                              value:currencyCode];

где currencyCode - интересующий вас код валюты (JPY, USD, EUR, ..).

1 голос
/ 17 января 2012

Возможно, проблема в том, что [formatter setLocale:[NSLocale currentLocale]]; перезаписывает некоторые настройки, которые вы выполнили до этого.Вы можете попробовать переместить эту строку вверх (сразу после строки alloc / init).

0 голосов
/ 24 ноября 2015

Попробуйте это formatter.currencyCode = @ "USD"; Укажите нужный код валюты, здесь будет возвращен соответствующий символ

0 голосов
/ 12 июля 2012

я использовал следующий код / ​​методы для получения валюты из значения с плавающей запятой

 +(NSString *) formatCurrencyTypeFloat: (float )val {

 NSNumberFormatter *formatter = [[[NSNumberFormatter alloc] init] autorelease];
    [formatter setNumberStyle:NSNumberFormatterCurrencyStyle];
    NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"us_ES"];
    or
    NSLocale *locale = [NSLocale currentLocale];;
    [formatter setLocale:locale]; 
    NSLog(@"%@",[formatter stringFromNumber:[NSNumber numberWithFloat:val]]);
    return [formatter stringFromNumber:[NSNumber numberWithFloat:val]];

}



+(NSString *) formateCurrencyTypeFloat:(float)val withSign:(NSString *)currencySign{
    NSNumberFormatter * fmt;
    NSNumber          * n;

    fmt = [[ [ NSNumberFormatter alloc ] init ]autorelease];
    n   = [ NSNumber numberWithFloat: val];

    [ fmt setFormatterBehavior: NSNumberFormatterBehavior10_4 ];
    [ fmt setCurrencySymbol: currencySign ]; //==> currencySign can be = @"$";
    [ fmt setNumberStyle: NSNumberFormatterCurrencyStyle ];


    return [ fmt stringFromNumber:n];
}

+(NSString *) formateCurrencyTypeFloat:(float)val withCode:(NSString *)currencyCode{
        NSNumberFormatter * fmt;
        NSNumber          * n;

        fmt = [[ [ NSNumberFormatter alloc ] init ]autorelease];
        n   = [ NSNumber numberWithFloat: val];

        [ fmt setFormatterBehavior: NSNumberFormatterBehavior10_4 ];
        [fmt setCurrencyCode:currencyCode];//====>@"USD";
        [ fmt setNumberStyle: NSNumberFormatterCurrencyStyle ];


        return [ fmt stringFromNumber:n];
    }
...