नहीं नहीं, नहीं, नहीं, नहीं, नहीं, नहीं।
NSNumberFormatter
का उपयोग करें। यही कारण है कि यह मौजूद है। -floatValue
और -doubleValue
केवल त्वरित और आसान अस्थायी फ़िक्स हैं, लेकिन वे खराब तरीके से विफल हो जाते हैं। उदाहरण के लिए:
NSLog(@"%f", [@"123" floatValue]); //logs 123.0000
NSLog(@"%f", [@"abc" floatValue]); //logs 0.0000
NSLog(@"%f", [@"0" floatValue]); //logs 0.0000
NSLog(@"%f", [@"42" floatValue]); //logs 42.0000
NSLog(@"%f", [@"42x" floatValue]); //logs 42.0000
-floatValue
एक उचित संख्या (@"0"
) और गलत एक (@"abc"
) के बीच अंतर करने में असमर्थ है।
NSNumberFormatter
दूसरी तरफ, आपको nil
देगा यदि यह इसे पार्स नहीं कर सकता है, और NSNumber
यदि यह कर सकता है। यह मुद्रा प्रतीकों, क्षेत्र-विशिष्ट दशमलव और हजारों विभाजक, और उपयोगकर्ता के लोकेल खाते में भी चीजें लेता है। -floatValue
और दोस्त नहीं करते हैं। How to convert an NSString into an NSNumber
स्रोत
2011-01-28 17:58:56
'लेकिन मैं नहीं बदल सकते float' को स्ट्रिंग - तुम यहाँ मतलब है स्ट्रिंग NSString या एक सी स्ट्रिंग है:
अधिक जानकारी के लिए इस संबंधित सवाल देखते हैं? – Mahesh
एक साइड नोट के रूप में, यदि आप मुद्रा कनवर्टर कर रहे हैं, तो आपको यह जांचने में रुचि हो सकती है: https://github.com/davedelong/DDUnitConverter इसमें एक मुद्रा कनवर्टर है जो आईएमएफ से डेटा खींचता है। –
ध्यान दें कि मुद्रा के साथ कुछ भी करते समय आप वाकई फ्लोट से बचना चाहते हैं। फ्लोट अपेक्षाकृत छोटे मूल्यों का सटीक रूप से प्रतिनिधित्व या गणना करने में सक्षम नहीं होने की उनकी क्षमता में उल्लेखनीय हैं। डबल्स काफी बेहतर हैं। – bbum