2012-01-03 8 views
22

मुझे webservice प्रतिक्रिया से मुद्रा कोड (जैसे: USD, EUR, INR) प्राप्त हुआ है। मुझे संबंधित मुद्रा कोड के लिए मुद्रा प्रतीकों को दिखाने की ज़रूरत है। यदि मुद्रा कोड USD है, तो मुझे $ दिखाने की ज़रूरत है, यदि मुद्रा कोड EUR है तो मुझे € दिखाने की आवश्यकता है। मैं यह कैसे कर सकता हूँ? ऐसा करने के लिए कृपया कोई विचार या नमूना कोड सुझाएं। क्रिप्या मेरि सहायता करे। अग्रिम में धन्यवाद।मैं आईफोन में मुद्रा कोड से मुद्रा प्रतीकों कैसे प्राप्त कर सकता हूं?

उत्तर

17

है के लिए है। मैं इसे आप सबको साझा करूंगा।

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

धन्यवाद।

+3

मुझे नहीं लगता कि यह कोड वांछित के रूप में काम करता है।यह केवल यूरो और यूएसडी के लिए सही मुद्रा प्रतीकों को दिखाता है। अन्य सभी मुद्राओं के लिए यह मुद्रा कोड के लिए पहला चरित्र दिखाता है। –

+0

यह कोड जादुई लगता है, यह स्पष्ट नहीं है कि यह ऐसा क्यों करता है जो यह कर रहा है। यदि आप तीसरी पंक्ति को बदलते हैं ताकि यह '[लोकेल ऑब्जेक्टफोर्की: एनएसएलोकेल कूरेंसीसिंबोल]' प्रिंट करता है, आउटपुट प्रिंट 'मुद्रा प्रतीक: ¤'। – dteoh

+2

यह कोड केवल EUR और USD के लिए सही ढंग से काम करता है, अन्य मेरे लिए अच्छा काम नहीं करते हैं। –

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

इस अमेरिकी मुद्रा शैली

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

यह इस कोड को अपने प्रोजेक्ट में आकर्षण काम करता है के लिए भारतीय

+0

आपकी प्रतिक्रिया के लिए धन्यवाद। क्या आप कृपया मुझे स्पष्ट रूप से बता सकते हैं? मैं आपका जवाब समझ नहीं पा रहा हूं। मुझे गलती मत करो। धन्यवाद। –

12

यह कोड वह है जो आप ढूंढ रहे हैं हालांकि स्थानीय लोगों के लिए लूप की वजह से बहुत कुशल नहीं है। फिर भी यह सभी मुद्रा कोडों के लिए सही ढंग से काम करता है, न केवल यूरो या यूएसडी के लिए। आशा है कि यह आपकी मदद करेगा।

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

इसे इस तरह का उपयोग करें:

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

इस कोड में कुछ ग़लत त्रुटियां हैं: यदि 'NSNumberFormatter' आउटपुट में पहले मुद्रा प्रतीक को न रखने का निर्णय लेता है, तो आपको एक गलत परिणाम मिल जाएगा। यदि मुद्रा प्रतीक एक यूटीएफ -16 कोडपॉइंट से अधिक पर कब्जा करने के लिए होता है, तो यह कटा हुआ हो जाएगा और अमान्य हो जाएगा –

+0

इसे बेहतर बनाएं और दूसरों को उपयोग करने दें। क्या यह साइट इस बारे में नहीं है?) और धन्यवाद। वास्तव में –

+0

। बेहतर उत्तर पोस्ट किया गया है। –

10

NSLocale खुशी से आप एक विशेष स्थान द्वारा प्रयोग किया जाता मुद्रा प्रतीक बता देंगे:

[locale objectForKey:NSLocaleCurrencySymbol]; 

यह भी आप मुद्रा कोड बता दूँगा:

[locale objectForKey:NSLocaleCurrencyCode]; 

तो आपको बस इतना करना है कि किसी दिए गए कोड से मेल खाने वाले लोकेल को देखें। इसे सीधे करने के लिए कोई अंतर्निहित विधि नहीं है (जिसे मैं जानता हूं), इसलिए सभी ज्ञात लोकेशंस के माध्यम से लूप करें और मेल खाने वाले किसी को चुनें। @ उम्का के answer का -findLocaleByCurrencyCode: विधि में इसका एक अच्छा उदाहरण है।

आप हर समय सभी लोकेशंस के माध्यम से फिर से शुरू करने के बजाय अपनी खुद की लुकअप टेबल बनाकर प्रक्रिया को अनुकूलित कर सकते हैं। आपको डुप्लिकेट मुद्रा कोडों की संभावना को संभालने की आवश्यकता हो सकती है, जिसके लिए निर्णय लेने के लिए कुछ ह्युरिस्टिक की आवश्यकता होगी जो सबसे अधिक संभावना लोकेल है।

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

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

NSString * symbol = formatter.currencySymbol; 
4

@ माइक अब्दुल्ला और @ उम्का से कोड पर बिल्डिंग, यहां स्विफ्ट में कुछ कार्य हैं।

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

स्विफ्ट 4 संस्करण

मुद्रा कोड स्थान ढूँढना:

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

का प्रारूपण मुद्रा

if let locale = localeGBP { 
    let formatter = NumberFormatter() 
    formatter.numberStyle = .currency 
    formatter.locale = locale 
    let result = formatter.string(from: 100000) // £100,000.00 
} 
0

स्विफ्ट

let locale = NSLocale(localeIdentifier: currencyCode) 
let currencySymbol = locale.displayName(forKey: .currencySymbol, value: currencyCode) ?? currencyCode 
print("Currency symbol: \(currencySymbol)") 

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^