2010-04-04 11 views
6

iPhone uygulamam, setCurrencyCode'u kullanarak bir NSDecimalNumber'i para birimi olarak formatlıyor, ancak başka bir ekran yalnızca para birimi simgesini görüntüler. Hem para birimi kodunu hem de sembolü saklamak yerine, sembolü koddan çıkarmak mümkün mü? Ben şu işe düşündüm, ama sadece $ olarak sembolünü verir:Para birimi sembolünü para biriminden türetmek mümkün mü?

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

NSString *currencySymbol = [numberFormatter currencySymbol]; 

cevap

5

Sen yerel değil, para birimi kodu ayarı olmak istiyorum. Ardından, biçimlendirici özelliklerinden beklenen sonuçları alırsınız (veya onları değiştirirsiniz). Yer işareti nesnesinin kendisinden de para birimi sembolü gibi şeyler alabilirsiniz. Eğer JPY Japonya için biçimlendirilmiş bir numarasını gösteren olsaydı Yani, örneğin,:

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

Şimdi sayı biçimlendirici size belirtilen yerel kurallara göre para birimi simgesi ve biçimi için doğru semboller vermelidir.

+0

Mükemmel, teşekkürler! –

6

Para birimi simgesiyle birlikte para birimi kodu içeren bir numara alabilirsiniz.

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

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

Aşağıdaki kod Ben böyle yapmak aslında verecek bir verilen 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'' 'currencySymbol' özelliği vardır. – pr1001

0

için sadece CURRENCYSYMBOL döndürür:

Bu

yapmam yoludur. SveinnV o sembol 0 miktarı önce bir yer ve o olabilir dedi bunu yapmaya karar verirseniz o zaman sadece sembol olarak @"0" alıyorsanız:

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

Sembol, yalnızca rakamdan önce olmakla kalmaz, sembolden önce veya sonra bir boşluk olabilir, bu yüzden hem boşluk hem de rakamı ayarlamak daha iyidir. – villapossu

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

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

NSString * symbol = formatter.currencySymbol;