2012-01-03 38 views
22

Tôi có mã tiền tệ (Ví dụ: USD, EUR, INR) từ phản hồi webservice. Tôi cần hiển thị ký hiệu tiền tệ cho mã tiền tệ tương ứng. Nếu mã tiền tệ là USD, tôi cần hiển thị $, nếu mã tiền tệ là EUR tôi cần phải hiển thị €. Tôi có thể làm cái này như thế nào? Vui lòng đề xuất bất kỳ ý tưởng hoặc mã mẫu nào để thực hiện việc này. Làm ơn giúp tôi. Cảm ơn trước.Tôi có thể lấy biểu tượng tiền tệ từ mã tiền tệ trong iphone bằng cách nào?

Trả lời

17

Mã này hoạt động quyến rũ trong dự án của tôi. Tôi sẽ chia sẻ điều này cho tất cả các bạn.

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

Cảm ơn.

+3

Tôi không nghĩ mã này hoạt động như mong muốn.Nó cho thấy các ký hiệu tiền tệ chính xác chỉ cho eur và usd. Đối với tất cả các loại tiền tệ khác, nó hiển thị ký tự đầu tiên cho mã tiền tệ. –

+0

Mã này có vẻ huyền diệu, không rõ tại sao nó làm những gì nó đang làm. Nếu bạn thay đổi dòng thứ ba để nó in '[locale objectForKey: NSLocaleCurrencySymbol]', đầu ra sẽ in 'Ký hiệu tiền tệ: ¤'. – dteoh

+2

mã này hoạt động đúng với EUR và USD, những mã khác không hoạt động tốt đối với tôi. –

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

này là dành cho Mỹ phong cách tệ

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

này là dành cho Ấn Độ

+0

Cảm ơn bạn đã trả lời. Bạn có thể cho tôi biết rõ ràng không? Tôi không hiểu câu trả lời của bạn. Đừng nhầm tôi. Cảm ơn. –

12

Mã này là những gì bạn đang tìm kiếm mặc dù không phải là rất hiệu quả vì vòng lặp cho miền địa phương. Tuy nhiên, nó hoạt động chính xác cho tất cả mã tiền tệ, không chỉ cho eur hoặc usd. Hy vọng điều này sẽ giúp bạn.

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

Sử dụng nó theo cách này:

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

Mã này có một số sai sót khó chịu: Nếu 'NSNumberFormatter' quyết định không đặt ký hiệu tiền tệ đầu tiên ở đầu ra, bạn sẽ nhận được kết quả không chính xác. Nếu ký hiệu tiền tệ xảy ra để chiếm nhiều hơn một điểm mã UTF-16, nó sẽ bị cắt nhỏ và không hợp lệ –

+0

Cải thiện nó và cho phép người khác sử dụng. Không phải là trang web này về điều đó?) và cảm ơn. –

+0

Thật vậy. Câu trả lời được cải thiện đã được đăng. –

10

NSLocale hạnh phúc sẽ cho bạn biết ký hiệu tiền tệ được sử dụng bởi một địa phương cụ thể:

[locale objectForKey:NSLocaleCurrencySymbol]; 

Nó cũng sẽ cho bạn biết mã tiền tệ:

[locale objectForKey:NSLocaleCurrencyCode]; 

Vì vậy, tất cả những gì bạn phải làm bây giờ là tra cứu ngôn ngữ tương ứng với một mã đã cho. Không có phương pháp tích hợp (mà tôi biết) để làm điều này trực tiếp, vì vậy hãy lặp qua tất cả các ngôn ngữ đã biết và chọn một ngôn ngữ phù hợp. @ Umka's answer có một ví dụ điển hình về phương pháp này theo phương pháp -findLocaleByCurrencyCode:.

Bạn có thể tối ưu hóa quy trình bằng cách tạo bảng tra cứu của riêng mình, thay vì lặp lại qua tất cả các ngôn ngữ mỗi lần. Bạn có thể cần phải xử lý khả năng của mã tiền tệ trùng lặp quá, mà sẽ đòi hỏi một số heuristic để quyết định đó là miền địa phương có khả năng nhất.

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

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

NSString * symbol = formatter.currencySymbol; 
4

Xây dựng trên mã từ @Mike Abdullah và @Umka, dưới đây là một số chức năng trong 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 phiên bản

Tìm locale bởi mã tiền tệ:

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

Định dạng tiền tệ

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)") 
Các vấn đề liên quan