पायथन पूर्णांक विभाजन पैदावार फ्लोट


223
Python 3.1 (r31:73574, Jun 26 2009, 20:21:35) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> 2/2
1.0

क्या यह इरादा है? मुझे दृढ़ता से याद है कि पहले के संस्करण वापस आ रहे हैं int/int=int? मुझे क्या करना चाहिए, क्या कोई नया डिवीजन ऑपरेटर है या मुझे हमेशा कास्ट करना चाहिए?


31
हाँ, यही तरीका 3. डिवीजन में काम करता है।
ह्यूगब्रोर्न

2
यहाँ पाइथन के रचनाकार द्वारा पोस्ट किया गया है कि कैसे राउंडिंग काम करता है, यह आपके प्रश्न के लिए रूढ़िवादी है,
Aaron D

@hughdbrown ताकि सभी अजगर 3 संस्करण के लिए अनिवार्य रूप से इसका मतलब है ?
चार्ली पार्कर

@hughdbrown: हाँ, पीईपी है अंतिम , जिसका अर्थ है दोनों को स्वीकार किया और लागू किया।
जोनास बिस्ट्रॉम

जवाबों:


285

PEP-238 पर एक नज़र डालें : डिवीजन ऑपरेटर बदलना

// ऑपरेटर फ्लोर डिवीजन को स्पष्ट रूप से अनुरोध करने के लिए उपलब्ध होगा।


10
अजगर कोड 2.0 के लिए लिखे गए सभी कोड को छोड़कर @JonathanSternberg। मुझे लगता है कि पीछे की संगतता बनाए रखने के लिए / और / की भूमिका को उलट दिया जाना चाहिए। इसके अलावा, बहुत अधिक हर दूसरी भाषा / प्रकार को संरक्षित करता है। मैं और अधिक समझ में आता है तो // के लिए स्वचालित रूप से नाव में बदलने के लिए, नहीं /।
थैग

1
दूसरा भाग ("भी" के बाद) समझ में आता है (अन्य भाषाओं के साथ समानता) लेकिन पहले भाग के बारे में, पायथन 3 का पूरा बिंदु पायथन 2 के साथ पीछे की ओर संगत नहीं होना था, बल्कि पायथन के साथ समस्याओं का एक गुच्छा ठीक करना 2. पर्याप्त लोगों /को एक भाषा डिजाइन "गलती" के लिए पर्याप्तता मिली, जिसे पाइथन 3 में तय किया जाना आवश्यक था। यह एक विवादास्पद निर्णय हो सकता था, लेकिन पर्याप्त लोगों को लगा कि यह सही है। मुझे उस समूह में गिनो जो बदलाव से प्यार करता है। यह अच्छा है कि हम सभी असहमत हो सकते हैं। चीयर्स। :)
रे तोल

59

उफ़, तुरंत मिल गया 2//2


5
क्या आप विस्तृत कर सकते हैं?
ब्लूफास्ट

4
इसका उपयोग करने से एक int आउटपुट होगा, न कि फ्लोट @dangonfast।
आशीष आहूजा

यह नकारात्मक संख्याओं के लिए काम नहीं करता है। -1 // 5 रिटर्न -1 और -5 // 5 रिटर्न -1।
मंशू

@mschuett: यह उम्मीद की जानी है, और पाइथन 2 के साथ भी ऐसा ही परिणाम है
जोनास बिस्ट्रॉम

1
हाँ, मैंने कुछ और खुदाई की और पाया। हालाँकि मुझे लगता है कि लोगों की सभ्य आकार की संख्या का अंदाजा इस बात से नहीं लगता कि वे जिस भाषा से आते हैं, उसके आधार पर।

45

आशा है कि यह किसी की तुरंत मदद कर सकता है।

पायथन 2.7 और पायथन 3 में डिवीजन ऑपरेटर का व्यवहार

पायथन 2.7 में: डिफ़ॉल्ट रूप से, डिवीजन ऑपरेटर पूर्णांक आउटपुट लौटाएगा।

"लाभांश या भाजक" के लिए डबल कई 1.0 में परिणाम प्राप्त करने के लिए

100/35 => 2 #(Expected is 2.857142857142857)
(100*1.0)/35 => 2.857142857142857
100/(35*1.0) => 2.857142857142857

पायथन 3 में

// => used for integer output
/ => used for double output

100/35 => 2.857142857142857
100//35 => 2
100.//35 => 2.0    # floating-point result if divsor or dividend real

1
वैसे, 1.0 से गुणा करने की कोई आवश्यकता नहीं है। यह पर्याप्त है कि संख्याओं में से एक फ्लोट है। जैसे, १०० / ३५.० = १००.० / ३५ = २.14५2१४२14५2१४२ --५ /
ताल जे। लेवी

21

स्वीकृत उत्तर में पहले से ही PEP 238 का उल्लेख है । मैं सिर्फ उन लोगों के लिए दृश्यों के पीछे एक त्वरित रूप जोड़ना चाहता हूं जो पूरे पीईपी को पढ़ने के बिना चल रहे हैं।

अजगर की तरह ऑपरेटरों नक्शे +, -, *और /विशेष कार्य, के लिए इस तरह जैसे कि a + bके बराबर है

a.__add__(b)

पायथन 2 में विभाजन के संबंध में, केवल डिफ़ॉल्ट रूप से होता है /जो कि मैप करता है __div__और परिणाम इनपुट प्रकारों (जैसे int, float) पर निर्भर है ।

पायथन 2.2 ने __future__फीचर पेश किया division, जिसने डिवीजन शब्दार्थ को निम्न तरीके से बदल दिया (टीएल; पीआरपी 238 का डीआर):

  • /__truediv__जिन मानचित्रों को "विभाजन के गणितीय परिणाम का एक उचित अनुमान वापस करना चाहिए" (पीईपी 238 से उद्धरण)
  • //के नक्शे __floordiv__, जो लौटे परिणाम लौटना चाहिए/

पायथन 3.0 के साथ, पीईपी 238 के परिवर्तन डिफ़ॉल्ट व्यवहार बन गए और __div__पायथन के ऑब्जेक्ट मॉडल में कोई विशेष विधि नहीं है ।

यदि आप Python 2 और Python 3 में समान कोड का उपयोग करना चाहते हैं

from __future__ import division

और पीईपी से चिपके की 238 अर्थ विज्ञान /और //


0

Python3 प्रलेखन के अनुसार, अजगर जब पूर्णांक से विभाजित होता है, तो पूर्णांक होने के बावजूद फ्लोट उत्पन्न करेगा।

विशेष रूप से पूर्णांक मुद्रण के लिए, का उपयोग करें floor division method। फर्श विभाजन शून्य से गोल हो रहा है और दशमलव बिंदु को हटा रहा है।Represented by //

इसलिए, 2/2 के बजाय उपयोग करें 2//2

आप __future__python2 या python3 का उपयोग करने के बावजूद विभाजन को आयात कर सकते हैं ।

आशा करता हूँ की ये काम करेगा!

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.