मुझे पहले ऐसा करने का एक अंतर्निहित तरीका नहीं मिला, इसलिए यदि कोई दिलचस्पी लेता है तो मैंने एक त्वरित कार्य (नीचे) बनाया। उस ने कहा, मुझे विश्वास है कि% g (धन्यवाद MSgambel, रोजर Gilbrat) और NSNumberFormatter वर्ग (धन्यवाद Inafziger, डेविड नेड्रो) यह बहुत अधिक संक्षेप में करते हैं, तो वे शायद बेहतर विकल्प हैं!
+ (NSString *)trimmedFraction:(float)fraction{
int i=0;
float numDiff=0;
// Loop through possible decimal values (in this case, maximum of 6)
for (i=0;i<=6;i++){
// Calculate difference between fraction and rounded fraction
numDiff=round(fraction*pow(10,i))/pow(10,i)-fraction;
// Check if difference is less than half of the smallest possible value
if (fabsf(numDiff)<(0.5*pow(10,-6))){
break;
}
}
// Return string of truncated fraction
NSString *stringPattern=[NSString stringWithFormat:@"%%0.%df",i];
return [NSString stringWithFormat:stringPattern,fraction];
}
कोड में आप दशमलव रिक्त स्थान की अधिकतम संख्या निर्दिष्ट कर सकते हैं (उदाहरण के लिए, इस मामले में 6)। फिर आप इसे केवल एक अंश भेजते हैं और यह केवल प्रासंगिक दशमलव के साथ एक स्ट्रिंग देता है। उदाहरण के लिए, इसे 4.231000 भेजें और यह @ 4.231 "लौटाता है, इसे 5.000000 भेजें और यह @ 5" लौटाता है। (फिर, शायद% g और NSNumberWithFormatter का उपयोग करने के लिए शायद बेहतर है)।
यह समझ में नहीं आता है क्योंकि फ़्लोटिंग-पॉइंट प्रतिनिधित्व सटीक नहीं है। ** आप ** आवश्यक दशमलव स्थान निर्दिष्ट करें। –
टिप्पणी के लिए धन्यवाद। उम्मीद है कि यह चीजों को स्पष्ट करता है: यदि मेरे पास दो चर थे, तो x = 4.231 और y = 5 कहें, और मैं उनके साथ एक स्ट्रिंग बनाना चाहता हूं, जैसे @ "% f +% f", मैं "4.231000 + 5.000000" । हालांकि, मुझे "4.231 + 5" की आवश्यकता है और मैं सोच रहा हूं कि ऐसा करने के लिए कोई कार्यक्षमता है या नहीं, या मैं सिर्फ फ़ंक्शन को कोड करता हूं या नहीं। – Rogare
@Rogare 'x' प्रारंभ होने के बाद इसका मान' 4.2309999999999998721023075631819665431976318359375' है। अब संकलक कैसे तय कर सकता है कि आप कितने अंक चाहते हैं? –