2012-01-03 15 views
22

Ho ricevuto il codice di valuta (es: USD, EUR, INR) dalla risposta del servizio web. Devo mostrare i simboli di valuta per il codice di valuta corrispondente. Se il codice valuta è USD, ho bisogno di mostrare $, se il codice valuta è EUR ho bisogno di mostrare €. Come posso fare questo? Si prega di suggerire qualsiasi idea o codice di esempio per farlo. Mi aiuti per favore. Grazie in anticipo.Come posso ottenere i simboli di valuta dal codice di valuta in iphone?

risposta

17

Questo codice funziona fascino nel mio progetto. Condividerò questo a tutti voi.

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

Grazie.

+3

Non penso che questo codice funzioni come desiderato.Mostra i simboli di valuta corretti solo per eur e usd. Per tutte le altre valute mostra il primo carattere per il codice valuta. –

+0

Questo codice sembra magico, non è chiaro perché fa quello che sta facendo. Se si modifica la terza riga in modo che stampi '[locale objectForKey: NSLocaleCurrencySymbol]', l'output stampa 'Simbolo valuta: ¤'. – dteoh

+2

questo codice funziona correttamente solo per EUR e USD, altri non funzionano bene per me. –

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

questo è per lo stile valuta statunitense

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

Questo è per indian

+0

Grazie per la risposta. Puoi dirmi chiaramente? Non riesco a capire la tua risposta. Non scambiarmi. Grazie. –

12

Questo codice è quello che stai cercando anche se non molto efficiente a causa del ciclo per le impostazioni locali. Funziona ancora correttamente per tutti i codici di valuta, non solo per eur o usd. Spero che questo ti possa aiutare.

- (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 in questo modo:

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

Questo codice presenta alcuni difetti: se 'NSNumberFormatter' decide di non inserire il simbolo di valuta prima nell'output, si otterrà un risultato errato. Se il simbolo della valuta occupa più di un singolo punto di codice UTF-16, verrà troncato e non valido –

+0

Migliorarlo e consentire ad altri di usarlo. Non è questo il sito a riguardo?) e grazie. –

+0

Infatti. Risposta migliorata è stata pubblicata –

10

NSLocale sarà lieto di dirvi il simbolo di valuta utilizzato da un locale in particolare:

[locale objectForKey:NSLocaleCurrencySymbol]; 

sarà anche dirvi il codice valuta:

[locale objectForKey:NSLocaleCurrencyCode]; 

Quindi tutto ciò che devi fare ora è cercare le impostazioni locali che corrispondono a un determinato codice. Non esiste un metodo integrato (di cui sono a conoscenza) per farlo direttamente, quindi passa in rassegna tutte le localizzazioni conosciute e scegli quella che corrisponde. @ Umka's answer ha un buon esempio di questo nel metodo -findLocaleByCurrencyCode:.

È possibile ottimizzare il processo creando la propria tabella di ricerca, anziché ripetere tutte le volte ogni locale. Potrebbe essere necessario gestire anche la possibilità di codici di valuta duplicati, il che richiederebbe un certo euristico per decidere quale sia la localizzazione più probabile.

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

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

NSString * symbol = formatter.currencySymbol; 
4

Basandosi sul codice di @Mike Abdullah e @Umka, qui ci sono alcune funzioni in 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 versione

Trovare locale per codice valuta:

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

Formattazione valuta

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)")