2012-09-20 18 views
17

मैं एक स्ट्रिंग से मुद्रा मूल्य प्राप्त करने के लिए NSNumberFormatter का उपयोग कर रहा हूं और यह अच्छी तरह से काम करता है।NSNumberFormatter प्रतीक के बिना मुद्रा?

मैं ऐसा करने के लिए इस कोड का उपयोग करें:

NSNumberFormatter *nf = [[NSNumberFormatter alloc] init]; 
    [nf setNumberStyle:NSNumberFormatterCurrencyStyle]; 
    NSString *price = [nf stringFromNumber:[NSNumber numberWithFloat:[textField.text floatValue]]]; 

हालांकि, यह हमेशा मुझे स्ट्रिंग के शुरू में एक मुद्रा प्रतीक देता है। इसे मैन्युअल रूप से मेरी दिए गए स्ट्रिंग को बनाने के बजाय, क्या मैं किसी भी तरह से फॉर्मेटर को स्ट्रिंग को कोई मुद्रा प्रतीक नहीं दे सकता?

किसी भी मदद की सराहना की है, धन्यवाद।

+0

मन है कि वह हमेशा शुरू में नहीं होगा:


निम्नलिखित खेल का मैदान कोड कैसे एक खाली प्रतीक के साथ अपनी मुद्रा स्वरूपण शैली सेट को दर्शाता है 12,34 € – ATV

उत्तर

57

हाँ, आप शैली सेट करने के बाद, आप ठीक कर सकते हैं विशिष्ट पहलुओं:

NSNumberFormatter *nf = [[NSNumberFormatter alloc] init]; 
[nf setNumberStyle:NSNumberFormatterCurrencyStyle]; 
[nf setCurrencySymbol:@""]; // <-- this 
NSDecimalNumber* number = [NSDecimalNumber decimalNumberWithString:[textField text]]; 
NSString *price = [nf stringFromNumber:number]; 

बस कुछ सलाह के रूप में, तो आप शायद एक नंबर फ़ॉर्मेटर है, खासकर अगर एक उपयोगकर्ता यह प्रवेश कर रहा है का उपयोग करना चाहिए स्ट्रिंग मान को पढ़ने के लिए (जैसा कि आपके कोड द्वारा सुझाया गया है)। इस मामले में, यदि उपयोगकर्ता लोकेल-विशिष्ट स्वरूपण पाठ में प्रवेश करता है, तो सामान्य -floatValue और -doubleValue प्रकार विधियां आपको संक्षिप्त संख्या नहीं देगी। साथ ही, आपको संभवतः -doubleValue का उपयोग करना चाहिए जो एक मुद्रा है जो उपयोगकर्ता द्वारा दर्ज किए गए टेक्स्ट से फ़्लोटिंग पॉइंट नंबर में परिवर्तित हो। अंतर्राष्ट्रीयकरण पर डब्ल्यूडब्ल्यूडीसी 12 डेवलपर सत्र वीडियो में इसके बारे में अधिक जानकारी है।

संपादित करें: उपयोगकर्ता कोड में मौजूद संख्या का प्रतिनिधित्व करने के लिए उदाहरण कोड में NSDecimalNumber का उपयोग किया गया। यह अभी भी उचित सत्यापन नहीं कर रहा है, लेकिन मूल कोड से बेहतर है। धन्यवाद @Mark!

+0

पैसे के लिए आप शायद डबल की बजाय NSDecimalNumber का उपयोग करना चाहें ताकि आपके पास गोल करने के मुद्दे – Mark

+0

@ मार्क हाँ, मैं सहमत हूं, मैं वास्तव में ऐसा करने के लिए मूल कोड संपादित करने जा रहा हूं। –

0

स्विफ्ट भाषा

let mymoney = 12000 

let formatter = NSNumberFormatter() 
formatter.numberStyle = .CurrencyStyle 
formatter.currencySymbol = "" 
formatter.locale = NSLocale.currentLocale() 

let resultString = formatter.stringFromNumber(mymoney)! 
2
स्विफ्ट 3, NumberFormatter साथ

के लिए के रूप में एक संपत्ति currencySymbol कहा जाता है।

var currencySymbol: String! { get set } 

स्ट्रिंग एक स्थानीय मुद्रा प्रतीक के रूप में रिसीवर द्वारा इस्तेमाल किया: currencySymbol निम्नलिखित घोषणा की है।

इसलिए, यदि आपकी स्वरूपण शैली के लिए आवश्यक है, तो आप इस संपत्ति को खाली String पर सेट कर सकते हैं। यूरो कीमतों के लिए आप की तरह कुछ होगा -

import Foundation 

let amount = 12000 

let formatter = NumberFormatter() 
formatter.numberStyle = .currency 
formatter.currencySymbol = "" 
formatter.locale = Locale(identifier: "en_US") // set only if necessary 

let result = formatter.string(for: amount) 
//let result = formatter.string(from: NSNumber(value: amount)) // also works 

print(String(describing: result)) 
// prints Optional("12,000.00") 
संबंधित मुद्दे