Swift में Precision string format specifier: संख्याओं के आउटपुट की सटीकता को कैसे नियंत्रित करें
\n\nनमस्ते, सहकर्मी! यदि आपने कभी Swift में दशमलव के बाद एक निश्चित संख्या में अंकों के साथ कोई संख्या आउटपुट करने की आवश्यकता महसूस की है, तो आपने शायद देखा होगा कि क्लासिक String(format:) हमेशा स्पष्ट रूप से व्यवहार नहीं करता है। खासकर यदि आप C या Objective-C की दुनिया से आए हैं, जहाँ printf एक पवित्र गाय है। इस लेख में, हम समझेंगे कि Swift में precision string format specifier कैसे काम करता है, यह कभी-कभी "टूट" क्यों जाता है, और इसका सही उपयोग कैसे करें। चलिए शुरू करते हैं!
precision specifier क्या है और इसकी आवश्यकता क्यों है?
\n\nPrecision specifier फ़ॉर्मेट स्ट्रिंग का एक हिस्सा है जो यह निर्धारित करता है कि दशमलव के बाद कितने अंक (या कुल अंकों की संख्या) प्रदर्शित की जानी चाहिए। Swift में, C की तरह, इसे फ़ॉर्मेट स्पेसिफ़ायर के अंदर एक बिंदु के बाद लिखा जाता है। उदाहरण के लिए, %.2f का अर्थ है "फ़्लोटिंग पॉइंट संख्या को दशमलव के बाद दो अंकों के साथ प्रदर्शित करें"।
लेकिन यहाँ एक बारीकी है: Swift स्ट्रिंग फ़ॉर्मेटिंग के लिए Core Foundation का उपयोग करता है, और इसका व्यवहार C में आपके द्वारा देखे जाने वाले व्यवहार से भिन्न हो सकता है। यह विशेष रूप से Double और Float के साथ काम करने पर लागू होता है।
आइए तुरंत एक सरल उदाहरण देखें जो अक्सर Stack Overflow पर प्रश्नों में दिखाई देता है:
\n\nlet pi = Double.pi\nlet formatted = String(format: "%.2f", pi)\nprint(formatted) // आउटपुट: "3.14"\n\nसब कुछ घड़ी की तरह काम करता है। लेकिन जैसे ही हम अधिक जटिल फ़ॉर्मेट के साथ प्रयोग करना शुरू करते हैं, आश्चर्य शुरू हो जाते हैं।
\n\nSwift में precision specifier के मुख्य प्रकार
\n\nSwift में निम्नलिखित स्पेसिफ़ायर समर्थित हैं जो सटीकता को प्रभावित करते हैं:
\n\n- \n
%f— फ़्लोटिंग पॉइंट संख्या। Precision दशमलव के बाद अंकों की संख्या निर्दिष्ट करता है। \n%e— घातांकीय संकेतन। Precision बिंदु के बाद अंकों की संख्या है। \n%g— मान के आधार पर%fऔर%eके बीच चयन करता है। Precision महत्वपूर्ण अंकों की कुल संख्या है। \n%d/%i— पूर्णांक। Precision अंकों की न्यूनतम संख्या है (बाईं ओर शून्य से भरा जाता है)। \n%s— स्ट्रिंग्स। Precision प्रदर्शित किए जाने वाले वर्णों की अधिकतम संख्या है। \n
लेकिन सबसे दिलचस्प बात तब शुरू होती है जब हम String(format:) के माध्यम से Double या Float पर precision लागू करने का प्रयास करते हैं।
लोकप्रिय समस्या: "precision काम क्यों नहीं कर रहा?"
\n\nStack Overflow पर सबसे आम शिकायतों में से एक: "मैं String(format: "%.2f", myDouble) लिखता हूँ, लेकिन मुझे अप्रत्याशित परिणाम मिलता है"। आइए एक विशिष्ट परिदृश्य को समझते हैं:
let value: Float = 1.23456789\nlet result = String(format: "%.4f", value)\nprint(result) // कंपाइलेशन के आधार पर "1.2346" या "1.2345" आउटपुट हो सकता है\n\nक्यों? क्योंकि Float की सटीकता लगभग 6-7 महत्वपूर्ण अंकों की होती है। यदि आप 1.23456789 पास करते हैं, तो फ़ॉर्मेट में जाने से पहले ही यह 1.234568 (या लगभग) में राउंड हो जाता है। और %.4f में precision पहले से ही इस राउंड किए गए मान पर लागू होता है।
भ्रम से बचने के लिए, यदि उच्च सटीकता की आवश्यकता है तो फ़्लोटिंग पॉइंट संख्याओं के लिए हमेशा Double का उपयोग करें:
let value: Double = 1.23456789\nlet result = String(format: "%.4f", value)\nprint(result) // विश्वसनीय रूप से "1.2346" आउटपुट करेगा\n\nउन्नत उदाहरण: precision को गतिशील रूप से कैसे नियंत्रित करें
\n\nकभी-कभी precision को हार्डकोड करने के बजाय एक वेरिएबल के माध्यम से सेट करने की आवश्यकता होती है। Swift इसे दो तरीकों से करने की अनुमति देता है:
\n\nविधि 1: * (तारांकन) के माध्यम से
फ़ॉर्मेट स्पेसिफ़ायर में संख्या के बजाय * का उपयोग किया जा सकता है, और तब precision अगले