2012-01-17 15 views
6

Ho un problema con il currencySymbol del mio NSNumberFormatter.
Uso un NSNumberFormatter con un codice di valuta "EUR".
Quando formatto i prezzi, il simbolo è corretto, ottengo il simbolo €.
Tuttavia, quando voglio ottenere solo la valutaSymbol con il metodo [formatter currencySymbol], viene restituito il simbolo $.
Se imposto manualmente currencySymbol (con "A" per esempio) tutto funzionerà correttamente e il metodo [formatter currencySymbol] restituirà il simbolo "A".


Ecco il mio codiceErrore con NSNumberFormatter currencySymbol

// 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]]); 

Ecco i risultati della console:

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 

non posso forzare la currencySymbol dal momento che può cambiare.
Esiste un modo per ottenere la valuta correttaSymbol corrispondente a un determinato currencyCode?

Grazie

+0

Penso che manchi il primo NSLog dai risultati della console. –

+0

Lo stesso problema qui! 'currencySymbol' semplicemente non sta restituendo quello che dovrebbe - per quanto possiamo dire dai documenti cosa pensa che dovrebbe fare ......... – ATV

+0

Downvote perché non si è preoccupato di controllare le risposte e contrassegnare uno come giusto – Andy

risposta

1

Il problema potrebbe essere che [formatter setLocale:[NSLocale currentLocale]]; sovrascrive alcune delle configurazione che hai fatto prima di esso. Puoi provare a spostare quella linea in alto (subito dopo la linea alloc/init).

+1

Purtroppo ho ancora $ invece del € – nicolas

+0

Hai provato '[formatter internationalCurrencySymbol] '? – Clafou

+1

Sì, ho dimenticato di dirlo. Mi dà "USD". – nicolas

-1

ho usato il seguente codice/metodi per ottenere la moneta da un valore float

+(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]; 
    } 
+1

.. e questo si riferisce alla domanda come? – Jay

2

Per ottenere il simbolo di valuta è possibile utilizzare NSLocaleCurrencySymbol con NSLocale:

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

Per ottenere il nome localizzato ('Dollaro USA', 'Yen giapponese', ..) è possibile utilizzare NSLocaleCurrencyCode:.

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

dove currencyCode è il codice valuta (JPY, USD, EUR, ..) che ti interessa

+0

Questa deve essere la risposta giusta. – Andy

1

Prova questo formatter.currencyCode = @ "USD"; Fornire il codice valuta desiderato qui restituirà il simbolo corretto

Problemi correlati