2010-04-04 12 views
6

La mia app per iPhone formatta un NSDecimalNumber come valuta utilizzando setCurrencyCode, tuttavia in un'altra schermata viene visualizzato solo il simbolo della valuta. Invece di memorizzare sia il codice di valuta che il simbolo, è possibile ricavare il simbolo dal codice? Ho pensato che il seguente potrebbe funzionare, ma restituisce solo il simbolo da $:È possibile derivare il simbolo di valuta dal codice di valuta?

currencyCode = [dictPrices valueForKey:@"currencyCode"]; 
NSNumberFormatter *numberFormatter = [[[NSNumberFormatter alloc] init] autorelease]; 
[numberFormatter setFormatterBehavior:NSNumberFormatterBehavior10_4]; 
[numberFormatter setCurrencyCode:currencyCode]; 
[numberFormatter setNumberStyle:NSNumberFormatterCurrencyStyle]; 

NSString *currencySymbol = [numberFormatter currencySymbol]; 

risposta

5

si vuole essere l'impostazione della localizzazione, non il codice di valuta. Quindi otterrai i risultati attesi dalle proprietà del formattatore (o li ritocchi). Puoi anche ottenere cose come il simbolo di valuta dall'oggetto locale stesso. Così, per esempio, se state visualizzando un numero formattato per il Giappone in JPY:

NSLocale* japanese_japan = [[[NSLocale alloc] initWithLocaleIdentifier:@"ja_JP"] autorelease]; 
NSNumberFormatter *fmtr = [[[NSNumberFormatter alloc] init] autorelease]; 
[fmtr setNumberStyle:NSNumberFormatterCurrencyStyle]; 
[fmtr setLocale:japanese_japan]; 

Ora il tuo numero di formattatore dovrebbe dare i simboli corretti per il simbolo di valuta e il formato secondo le regole del locale specificata.

+0

eccellente, grazie! –

6

È possibile ottenere il numero con il simbolo di valuta dal numero con il codice di valuta.

Questo è il mio modo di fare:

NSString *currencyCode = @"HKD"; 
    NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init]; 
    [numberFormatter setCurrencyCode:currencyCode]; 
    [numberFormatter setNumberStyle:NSNumberFormatterCurrencyStyle]; 

    cell.amountLabel.text = [numberFormatter stringFromNumber: expense.exAmount]; 
0

Il seguente codice restituirà solo la currencySymbol per un dato currencyCode

- (NSString*)getCurrencySymbolFromCurrencyCode:(NSString*)currencyCode { 
    NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; 
    [formatter setNumberStyle:NSNumberFormatterCurrencyStyle]; 
    [formatter setCurrencyCode:currencyCode]; 
    [formatter setMaximumFractionDigits:0]; 
    NSString *string = [formatter stringFromNumber:[NSNumber numberWithInt:0]]; 
    [formatter release]; 
    return [string substringFromIndex:1]; 
} 
+1

'NSNumberFormatter' ha una proprietà' currencySymbol'. – pr1001

0

mi sarebbe effettivamente fare in questo modo. Se si decide di fare come SveinnV ha detto che potrebbe essere che il simbolo è posto prima che l'importo 0 e poi si sono solo ottenere @"0" come il simbolo:

- (NSString *) currencySymbolForCurrencyCode:(NSString *) currencyCode 
{ 

    NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; 
    [formatter setNumberStyle:NSNumberFormatterCurrencyStyle]; 
    [formatter setMaximumFractionDigits:0]; 

    [formatter setCurrencyCode:currencyCode]; 

    NSString *string = [formatter stringFromNumber:[NSNumber numberWithInt:0]]; 
    NSArray *components = [string componentsSeparatedByCharactersInSet:[NSCharacterSet decimalDigitCharacterSet]]; 

    return [components firstObject]; 
} 
+0

Non solo il simbolo può essere antecedente alla cifra, può esserci uno spazio prima o dopo il simbolo, quindi è meglio sfoltire sia spazi bianchi che cifre. – villapossu

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

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

NSString * symbol = formatter.currencySymbol;