हाफ फ्लोट राउंडिंग-अप दुविधा
राउंड() फ़ंक्शन के साथ एक विषमता का सामना करना पड़ रहा है? निम्नलिखित व्यवहार पर गौर करें:
for i in range(1, 15, 2): n = i / 2 print(n, "=>", round(n))
आप उम्मीद कर सकते हैं कि फ्लोटिंग मान लगातार राउंड अप होंगे, फिर भी वे आश्चर्यजनक रूप से निकटतम सम संख्या तक राउंड अप करते हैं।
व्यवहार के पीछे का कारण
संख्यात्मक प्रकारों के लिए दस्तावेज़ इस अजीब व्यवहार को कथन के साथ स्पष्ट करता है "राउंड(x[, n]) x को n अंकों में पूर्णांकित किया जाता है, आधे को पूर्णांकित किया जाता है यहां तक की।" इसे बैंकर्स राउंडिंग के रूप में जाना जाता है। लगातार ऊपर या नीचे राउंडिंग करने के बजाय, जो राउंडिंग त्रुटियों को बढ़ाएगा, बैंकर्स राउंडिंग निकटतम सम संख्या को लक्षित करके क्षतिपूर्ति करते हैं। , दशमलव मॉड्यूल का लाभ उठाएं। यह मॉड्यूल आपको विशिष्ट राउंडिंग रणनीतियों को निर्दिष्ट करने के विकल्पों से सुसज्जित करता है। उदाहरण के लिए, आधे से पूर्णांक बनाने के लिए:
>>> दशमलव से स्थानीय संदर्भ, दशमलव, ROUND_HALF_UP आयात करें >>>localcontext() के साथ ctx: ...ctx.राउंडिंग = ROUND_HALF_UP ... के लिए मैं रेंज में (1, 15, 2): ... n = दशमलव(i)/2 ... प्रिंट(n, '=>', n.to_integral_value()) ... 0.5 => 1 1.5 => 2 2.5 => 3 3.5 => 4 4.5 => 5 5.5 => 6 6.5 => 7
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3