2012-01-03 22 views
22

Tengo el código de moneda (por ejemplo, USD, EUR, INR) de la respuesta del servicio web. Necesito mostrar los símbolos de moneda para el código de moneda correspondiente. Si el código de moneda es USD, necesito mostrar $, si el código de moneda es EUR, necesito mostrar €. ¿Cómo puedo hacer esto? Por favor sugiera cualquier idea o código de muestra para hacer esto. Por favor, ayúdame. Gracias por adelantado.¿Cómo puedo obtener símbolos de moneda del código de moneda en iphone?

Respuesta

17

Este código funciona encanto en mi proyecto. Voy a compartir esto con todos ustedes.

NSString *currencyCode = @"EUR"; 
    NSLocale *locale = [[[NSLocale alloc] initWithLocaleIdentifier:currencyCode] autorelease]; 
    NSString *currencySymbol = [NSString stringWithFormat:@"%@",[locale displayNameForKey:NSLocaleCurrencySymbol value:currencyCode]]; 
    NSLog(@"Currency Symbol : %@", currencySymbol); 

Gracias.

+3

No creo que este código funcione como se desee.Muestra los símbolos de moneda correctos solo para eur y usd. Para todas las demás monedas, muestra el primer carácter para el código de moneda. –

+0

Este código parece mágico, no está claro por qué hace lo que hace. Si cambia la tercera línea para que imprima '[locale objectForKey: NSLocaleCurrencySymbol]', la salida imprime 'Currency Symbol: ¤'. – dteoh

+2

este código funciona correctamente solo para EUR y USD, otros no funcionan bien para mí. –

-1
NSNumberFormatter *currencyFormatter = [[NSNumberFormatter alloc] init]; 
    [currencyFormatter setNumberStyle:NSNumberFormatterCurrencyStyle]; 

esto es para el estilo moneda estadounidense

NSNumberFormatter *numberFormatter = [[[NSNumberFormatter alloc] init] autorelease]; 
    //[numberFormatter setCurrencySymbol:@"Rs"];   
    [numberFormatter setNumberStyle:@"en_IN"]; 

Esto es para indio

+0

Gracias por su respuesta. ¿Puedes decirme claramente? No puedo entender tu respuesta. No me confundas Gracias. –

12

Este código es lo que está buscando, aunque no es muy eficiente debido al bucle para las configuraciones regionales. Todavía funciona correctamente para todos los códigos de moneda, no solo para eur o usd. Espero que esto te ayudará.

- (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; 
} 

usarlo de esta manera:

NSString *currencySymbol = [self findCurrencySymbolByCode:currencyCode]; 
+2

Este código tiene algunos defectos desagradables: si 'NSNumberFormatter' decide no colocar el símbolo de moneda primero en la salida, obtendrá un resultado incorrecto. Si el símbolo de la moneda ocupa más de un punto de código UTF-16, se cortará y no será válido –

+0

. Mejore y permita que otros lo usen. ¿No es este sitio sobre eso?) y gracias. –

+0

De hecho. Se ha publicado una respuesta mejorada. –

10

NSLocale estará feliz de decirle el símbolo de moneda utilizada por un lugar en particular:

[locale objectForKey:NSLocaleCurrencySymbol]; 

También le diremos el código de moneda:

[locale objectForKey:NSLocaleCurrencyCode]; 

Entonces, todo lo que tiene que hacer ahora es buscar la configuración regional correspondiente a un código determinado. No hay un método incorporado (que yo sepa) para hacer esto directamente, de modo que recorra todas las configuraciones regionales conocidas y elija la que coincida. @ Umka's answer tiene un buen ejemplo de esto en el método -findLocaleByCurrencyCode:.

Puede optimizar el proceso construyendo su propia tabla de búsqueda, en lugar de recorrer todas las configuraciones regionales cada vez. Es posible que deba manejar la posibilidad de códigos de moneda duplicados también, lo que requeriría cierta heurística para decidir cuál es la configuración regional más probable.

3
NSNumberFormatter * formatter = [NSNumberFormatter new]; 
formatter.numberStyle = NSNumberFormatterCurrencyStyle; 

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

NSString * symbol = formatter.currencySymbol; 
4

Basado en el código de @Mike Abdullah y @Umka, estas son algunas funciones en 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 
} 
7

Swift 4 Versión

Encontrar local por código de moneda:

let localeGBP = Locale 
        .availableIdentifiers 
        .map { Locale(identifier: $0) } 
        .first { $0.currencyCode == "GBP" } 
print(localeGBP?.currencySymbol) // £ 

formato de moneda

if let locale = localeGBP { 
    let formatter = NumberFormatter() 
    formatter.numberStyle = .currency 
    formatter.locale = locale 
    let result = formatter.string(from: 100000) // £100,000.00 
} 
0

Swift

let locale = NSLocale(localeIdentifier: currencyCode) 
let currencySymbol = locale.displayName(forKey: .currencySymbol, value: currencyCode) ?? currencyCode 
print("Currency symbol: \(currencySymbol)") 
Cuestiones relacionadas