2012-11-14 8 views
5

में मुद्रा स्ट्रिंग को फ्लोट में कनवर्ट करें मेरा लक्ष्य सरल है, मेरे पास एक स्थानीय मुद्रा मुद्रा मूल्य (उदाहरण के लिए $ 1,000.00) संग्रहीत टेक्स्टफील्ड है और मुझे टेक्स्टफील्ड से उस मूल्य को वापस ले जाने की आवश्यकता है ताकि कुछ परीक्षण करने के लिए टेक्स्टफील्डऑब्जेक्टिव-सी

कोड है बहुत आसान है, पहले मैं NSNumber एक localizedString के रूप में तो स्वरूपित:

NSNumberFormatter* formatter = [[NSNumberFormatter alloc] init]; 
formatter.locale = [NSLocale currentLocale]; 
formatter.numberStyle = NSNumberFormatterCurrencyStyle; 
textfield.text = [formatter stringFromNumber:number]; 

सब कुछ ठीक काम करता है, लेकिन फिर मैं यह स्थानीय स्ट्रिंग से doubleValue पाने के लिए विपरीत कार्य करें:

NSNumberFormatter* formatter = [[NSNumberFormatter alloc] init]; 
formatter.locale = [NSLocale currentLocale]; 
formatter.numberStyle = NSNumberFormatterCurrencyStyle; //also tested with NSNumberFormatterDecimalStyle 

double d = [formatter numberFromString:textfield.text].doubleValue; 
समस्या

कि फ़ॉर्मेटर सिर्फ अपने स्ट्रिंग के पूर्णांक मान और न दशमलव, बुरा, अगर यह एक कैनेडियन localizedstring है (20 000,00 $) यह केवल रिटर्न 20.

देता है

मैं अब कुछ समय खोज रहा हूं और इस व्यवहार के बारे में कुछ नहीं ढूंढ सकता। वर्कअराउंड निश्चित रूप से टेक्स्टफील्ड में बनाने से पहले एनएसएनंबर को संग्रहीत कर रहा है और फिर इस nsnumber का परीक्षण कर रहा है, लेकिन मुझे वास्तव में यह सुंदर नहीं लगता है।

+1

आपको इस [एक स्थान विशिष्ट स्ट्रिंग से एक NSDecimalNumber प्राप्त] देख सकते हैं [1] के बारे में [1]: http://stackoverflow.com/questions/317311/obtaining-an-nsdecimalnumber-from-a-locale-specific-string –

उत्तर

0

उत्तर, जैसा कि जिएसेपे द्वारा इंगित किया गया है, वास्तव में सरल है और मैं इसके बारे में सोचने के लिए दीवार के खिलाफ अपने सिर को झुका रहा हूं।

var locale = NSLocale.currentLocale() 
    var formatter = NSNumberFormatter() 
    formatter.locale = NSLocale(localeIdentifier: "en_US") 
    formatter.numberStyle = NSNumberFormatterStyle.CurrencyStyle 

    var moneyDouble = formatter.numberFromString(textField.text)?.doubleValue 
+0

अपने मूल कीमत स्ट्रिंग मुद्रा चिह्न शामिल है (जैसे: @ "$ 9.99"), तो zvtra का जवाब सही है (NSNumberFormatter का उपयोग करना)। – dornad

3

स्विफ्ट में, आप इसी तरह मुद्रा के प्रारूप करने के लिए स्थान की स्थापना, और उसके बाद हो रही डबल करके ऐसा कर सकते en_US होने के लिए स्थान पहचानकर्ता के लिए मजबूर नहीं करता है (स्विफ्ट 2):

func floatFromTextFieldText() -> Float { 
    let formatter = NSNumberFormatter() 
    formatter.locale = NSLocale.currentLocale() 
    formatter.numberStyle = NSNumberFormatterStyle.CurrencyStyle 
    guard let amount = self.text else { return 0.0 } 
    return formatter.numberFromString(amount)!.floatValue 
} 
0

zavtra के जवाब देने के लिए एक मामूली वृद्धि है कि एक नाव से वापस लौट कर:

double d = [NSDecimalNumber decimalNumberWithString:textfield.text locale:[NSLocale currentLocale]].doubleValue;