2011-01-28 10 views
5

में तैरने के लिए स्ट्रिंग मेरे पास कुछ स्ट्रिंग मान लौटने वाला पार्सर है जो मैं अपने क्लास इंस्टेंस प्रारंभिकरण के पैरामीटर के रूप में उपयोग करना चाहता हूं। जउद्देश्य सी

- (id) addCurrencyWithFrom: (NSString *) from_ andTo:(NSString *) to_ andRate:(float *) float_; 
+0

'लेकिन मैं नहीं बदल सकते float' को स्ट्रिंग - तुम यहाँ मतलब है स्ट्रिंग NSString या एक सी स्ट्रिंग है:

अधिक जानकारी के लिए इस संबंधित सवाल देखते हैं? – Mahesh

+0

एक साइड नोट के रूप में, यदि आप मुद्रा कनवर्टर कर रहे हैं, तो आपको यह जांचने में रुचि हो सकती है: https://github.com/davedelong/DDUnitConverter इसमें एक मुद्रा कनवर्टर है जो आईएमएफ से डेटा खींचता है। –

+2

ध्यान दें कि मुद्रा के साथ कुछ भी करते समय आप वाकई फ्लोट से बचना चाहते हैं। फ्लोट अपेक्षाकृत छोटे मूल्यों का सटीक रूप से प्रतिनिधित्व या गणना करने में सक्षम नहीं होने की उनकी क्षमता में उल्लेखनीय हैं। डबल्स काफी बेहतर हैं। – bbum

उत्तर

18

नहीं नहीं, नहीं, नहीं, नहीं, नहीं, नहीं।

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

+1

हे, आपने एक और सवाल का जवाब दिया जो मैंने अपने सिर में चारों ओर तैर रहा था। –

7
float f = [yourStringObject floatValue]; 
में

NSString *from = [[NSString alloc] initWithString:@"EUR"]; 
    NSString *to = [[NSString alloc] initWithString:[attributeDict objectForKey:@"currency"]]; 
    NSNumber *rate = [[NSNumber alloc] initWithFloat:[[attributeDict objectForKey:@"rate"] doubleValue]]; 


    currency = [[Currency init] alloc]; 
    [currency addCurrencyWithFrom:from andTo:to andRate:rate]; 

:

मैं एक विधि दो NSString और एक नाव मूल्य पूछ रहा है, लेकिन मैं स्ट्रिंग फ्लोट करने के लिए परिवर्तित नहीं कर सकते, यहाँ मेरी कोड है

1

प्रयास करें:

double f = [from_ doubleValue]; 
double t = [to_ doubleValue]; 

इसके अलावा, एक एन गुजर एक फ्लोट के बजाय SNumber * आपको वह परिणाम नहीं देगा जो आप उम्मीद कर रहे हैं।