2010-07-21 12 views
12

में मुद्रित करने के लिए मैं के रूप मेंकन्वर्ट NSString की गणना के लिए फिर से वापस दोगुना करने के लिए और फिर NSString

NSString *value = [valuelist objectAtIndex:valuerow]; 
NSString *value2 = [valuelist2 objectAtIndex:valuerow2]; 
UIPickerView से

NSString स्वीकार करते हैं। मैं

double *cal = value + (value2 * 8) + 3; 


NSString *message =[[NSString alloc] initWithFormat:@"%@",cal]; 

को मैं संदेश में स्ट्रिंग प्राप्त करने के लिए मैं इस पर गणना करने के बाद सक्षम होना चाहिए चाहते हैं .. कृपया मदद मेरे कार्यक्रम क्रैश हो रहा है

उत्तर

35
double cal = [value doubleValue] + ([value2 doubleValue] * 8) + 3; 
NSString *message =[[NSString alloc] initWithFormat:@"%f",cal]; 
+0

ठनक दोस्तों का उपयोग करें! इसने काम कर दिया ! –

+1

अब यह पूरी तरह से व्यक्तिपरक –

+0

है, मैंने चारों ओर देखा और अब तक% f और% g अधिकांश संदर्भों के समान समान प्रतीत होता है। वे कैसे अलग हैं? – jamone

1
 
double cal = [value doubleValue] + ([value2 doubleValue] * 8) + 3; 
NSString *message =[[NSString alloc] initWithFormat:@"%g",cal]; 

// do work with message 

[message release]; 
2

आप shouldn ' टी हर समय युगल और तारों के बीच परिवर्तित नहीं होता है, क्योंकि यह सटीकता खो देता है (सामान्य रूप से, यदि आप सटीकता खोना नहीं चाहते हैं तो आपको बहुत सावधान होना चाहिए)।

उदाहरण के लिए, nextafter(1.0,2.0) 1 से सबसे छोटा डबल (बिल्कुल 1.0000000000000002220446049250313080847263336181640625 लौटाता है, लेकिन हम 1.0000000000000002 से खुश हैं)। "% G" के साथ स्वरूपण सिर्फ "1" देता है।

हम उम्मीद करते हैं कि एनएसएनंबर सही काम करे, लेकिन [[NSNumber numberWithDouble:nextafter(1,2)] stringValue] भी "1" देता है। दस्तावेज़ों के मुताबिक, -[NSNumber stringValue][self descriptionWithLocale:nil] पर कॉल करता है जो इसे "% 0.16g" के साथ स्वरूपित करता है। वह पर्याप्त नहीं है। हालांकि, "% .17g" के साथ स्वरूपण करके हमें सही उत्तर मिलता है। मुझे लगता है कि "% .17 जी" पर्याप्त है कि डबल्स आईईईई 754 64-बिट युगल हैं और पुस्तकालय ठीक से काम कर रहे हैं, लेकिन इसकी कोई गारंटी नहीं है।

दिन के अंत में, [[NSString stringWithFormat:@"%.17g",n] doubleValue] == n कोई गारंटी नहीं है।

+0

इसके लिए धन्यवाद लेकिन मुझे केवल 2 दशमलव स्थानों की आवश्यकता है .. यानी: 12.50 –

1

एक नया उत्तर पोस्ट कर रहा है के बाद से स्वीकार किए जाते हैं एक ही है स्ट्रिंग => डबल:

double cal = [value doubleValue] + ([value2 doubleValue] * 8) + 3; 
NSString *message =[[NSString alloc] initWithFormat:@"%f",cal]; 

डबल => स्ट्रिंग जाने के लिए,

double cost = [string doubleValue]; 
+0

पॉइंटर क्यों? यह डबल लागत = [स्ट्रिंग डबलवैल्यू] होना चाहिए; –

+0

अच्छा बिंदु। मेटा स्तर पर ... टिप्पणी क्यों? बस पोस्ट संपादित करें? : डी – pfrank

+0

आप सही हैं :-) संपादित –

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