2012-01-17 10 views
6

Tengo un problema para obtener el currencySymbol de mi NSNumberFormatter.
Uso un NSNumberFormatter con un código de moneda "EUR".
Cuando formato precios, el símbolo es correcto, obtengo el símbolo €.
Sin embargo, cuando quiero obtener solo el símbolo de moneda con el método [formatter currencySymbol], se devuelve el símbolo $.
Si configuro manualmente el símbolo de moneda (con "A" por ejemplo) todo funcionará bien y el método [formatter currencySymbol] devolverá el símbolo "A".


Aquí está mi códigoError 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]]); 

Estos son los resultados de la consola:

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 

no puedo forzar la CURRENCYSYMBOL ya que puede cambiar.
¿Hay alguna manera de obtener el símbolo de cambio correcto correspondiente a un código de moneda dado?

Gracias

+0

Creo que le falta el primer NSLog de los resultados de la consola. –

+0

¡El mismo problema aquí! 'currencySymbol' simplemente no devuelve lo que se supone que debe - hasta donde podemos decir de los documentos lo que cree que se supone que debe hacer ......... – ATV

+0

Downvote porque no se molestó en verificar las respuestas y marcar una como correcto – Andy

Respuesta

1

El problema podría ser que algunos de [formatter setLocale:[NSLocale currentLocale]]; sobrescribe la configuración que hizo antes de ella. Puede intentar mover esa línea hacia la parte superior (justo después de la línea alloc/init).

+1

Lamentablemente todavía tengo el $ en lugar de la – nicolas

+0

€ ¿Usted ha intentado '[formateador internationalCurrencySymbol] ¿? – Clafou

+1

Sí, olvidé mencionarlo. Me da "USD". – nicolas

-1

he utilizado los siguientes códigos/métodos para obtener la moneda de un valor flotante

+(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

..y eso se relaciona con la pregunta ¿cómo? – Jay

2

Para obtener el símbolo moneda puede utilizar NSLocaleCurrencySymbol con NSLocale:

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

Para llegar el nombre localizado ('dólar estadounidense', 'yen japonés', ..) puede usar NSLocaleCurrencyCode:.

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

donde currencyCode es el código de moneda (JPY, USD, EUR, ..) que le interesa

+0

Esta debe ser la respuesta correcta. – Andy

1

Prueba este formatter.currencyCode = @ "USD"; Proporcione el código de moneda deseado aquí devolverá el símbolo correcto

Cuestiones relacionadas