2012-01-17 28 views
6

Tôi gặp sự cố khi nhận tiền tệSymbol của NSNumberFormatter của mình.
Tôi sử dụng NSNumberFormatter với mã tiền tệ "EUR".
Khi tôi định dạng giá, biểu tượng là chính xác, tôi nhận được ký hiệu €.
Tuy nhiên, khi tôi muốn chỉ nhận được currencySymbol với phương thức [formatter currencySymbol], ký hiệu $ được trả về.
Nếu tôi đặt thủ công tiền tệSymbol (với "A" chẳng hạn) mọi thứ sẽ hoạt động tốt và phương thức [formatter currencySymbol] sẽ trả về ký hiệu "A".


Đây là mã của tôiLỗi với 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]]); 

Dưới đây là giao diện điều khiển kết quả:

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 

tôi không thể buộc các CURRENCYSYMBOL vì nó có thể thay đổi.
Có cách nào để nhận đúng loại tiền tệ tương ứng với một mã tiền tệ nhất định không?

Cảm ơn

+0

Tôi nghĩ bạn đang thiếu NSLog đầu tiên từ kết quả bảng điều khiển. –

+0

Cùng một vấn đề ở đây! 'currencySymbol' chỉ không trả lại những gì nó được cho là - theo như chúng ta có thể nói từ các tài liệu những gì nó nghĩ rằng nó phải làm ......... – ATV

+0

Downvote vì không bận tâm để kiểm tra câu trả lời và đánh dấu một đúng. – Andy

Trả lời

1

Vấn đề này có thể là [formatter setLocale:[NSLocale currentLocale]]; ghi đè một số các cấu hình bạn đã làm trước đó. Bạn có thể muốn thử movig mà dòng đầu trang (ngay sau khi phân bổ/init dòng).

+1

Thật không may tôi vẫn có $ thay vì € – nicolas

+0

Bạn đã thử '[formatter internationalCurrencySymbol] '? – Clafou

+1

Có, tôi quên đề cập đến nó. Nó mang lại cho tôi "USD". – nicolas

-1

tôi đã sử dụng mã/phương pháp sau đây để có được đồng tiền từ một giá trị float

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

..và điều đó có liên quan đến câu hỏi như thế nào? – Jay

2

Để có được biểu tượng tệ bạn có thể sử dụng NSLocaleCurrencySymbol với NSLocale:

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

Để có được tên được bản địa hóa ('US Dollar', 'Yên Nhật', ..) bạn có thể sử dụng NSLocaleCurrencyCode:.

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

nơi currencyCode là mã tiền tệ (JPY, USD, EUR, ..) bạn quan tâm đến

+0

Đây phải là câu trả lời đúng. – Andy

1

Hãy thử điều này formatter.currencyCode = @ "USD"; Cung cấp Mã Đơn vị tiền tệ mong muốn tại đây nó sẽ trả về biểu tượng thích hợp

Các vấn đề liên quan