python - मैं प्रभाग को फ़्लोटिंग पॉइंट होने के लिए कैसे मजबूर कर सकता हूं? डिवीजन 0 से नीचे घूमता रहता है




floating-point integer (9)

मेरे पास दो और पूर्णांक मान हैं और b , लेकिन मुझे अपने अनुपात को फ्लोटिंग पॉइंट में चाहिए। मुझे पता है कि a<b और मैं a/b गणना करना चाहता हूं, इसलिए यदि मैं पूर्णांक विभाजन का उपयोग करता हूं तो मुझे हमेशा शेष के साथ 0 मिल जाएगा।

मैं निम्नलिखित में पाइथन में एक फ़्लोटिंग पॉइंट नंबर होने के लिए कैसे मजबूर कर सकता हूं?

c = a / b

मैं पाइथन में विभाजन को फ़्लोटिंग पॉइंट कैसे कर सकता हूं?

मेरे पास दो और पूर्णांक मान हैं और बी, लेकिन मुझे अपने अनुपात को फ्लोटिंग पॉइंट में चाहिए। मुझे पता है कि एक <बी और मैं ए / बी की गणना करना चाहता हूं, इसलिए यदि मैं पूर्णांक विभाजन का उपयोग करता हूं तो मुझे हमेशा शेष के साथ 0 मिल जाएगा।

मैं निम्नलिखित में पाइथन में एक फ़्लोटिंग पॉइंट नंबर होने के लिए कैसे मजबूर कर सकता हूं?

c = a / b

वास्तव में यहां क्या पूछा जा रहा है:

"मैं सच्चे विभाजन को कैसे बल दूं कि a / b एक अंश वापस कर देगा?"

पायथन 3 में अपग्रेड करें

पाइथन 3 में, सही विभाजन प्राप्त करने के लिए, आप बस a / b

>>> 1/2
0.5

फर्श डिवीजन, पूर्णांक के लिए क्लासिक डिवीजन व्यवहार, अब a // b :

>>> 1//2
0
>>> 1//2.0
0.0

हालांकि, आप पाइथन 2 का उपयोग कर फंस सकते हैं, या आप कोड लिख रहे हैं जो 2 और 3 दोनों में काम करना चाहिए।

यदि पायथन 2 का उपयोग करना है

पायथन 2 में, यह इतना आसान नहीं है। क्लासिक पायथन 2 डिवीजन से निपटने के कुछ तरीके दूसरों की तुलना में बेहतर और अधिक मजबूत हैं।

पायथन 2 के लिए सिफारिश

आप किसी दिए गए मॉड्यूल में पाइथन 3 डिवीजन व्यवहार को शीर्ष पर निम्न आयात के साथ प्राप्त कर सकते हैं:

from __future__ import division

जो तब पूरे मॉड्यूल में पायथन 3 स्टाइल डिवीजन लागू करता है। यह किसी दिए गए बिंदु पर एक अजगर खोल में भी काम करता है। पायथन 2 में:

>>> from __future__ import division
>>> 1/2
0.5
>>> 1//2
0
>>> 1//2.0
0.0

यह वास्तव में सबसे अच्छा समाधान है क्योंकि यह सुनिश्चित करता है कि आपके मॉड्यूल में कोड पाइथन 3 के साथ अधिक संगत है।

पायथन 2 के लिए अन्य विकल्प

यदि आप इसे पूरे मॉड्यूल पर लागू नहीं करना चाहते हैं, तो आप कुछ कामकाज तक ही सीमित हैं। सबसे लोकप्रिय एक ऑपरेटर को एक फ्लोट पर केंद्रित करना है। एक मजबूत समाधान a / (b * 1.0) । एक ताजा पायथन खोल में:

>>> 1/(2 * 1.0)
0.5

इसके अलावा operator मॉड्यूल operator.truediv(a, b) . truediv operator.truediv(a, b) से truediv मजबूत है, लेकिन यह धीमी गति से है क्योंकि यह एक समारोह कॉल है:

>>> from operator import truediv
>>> truediv(1, 2)
0.5

पायथन 2 के लिए अनुशंसित नहीं है

आम तौर पर देखा जाता है a / float(b) । यदि बी एक जटिल संख्या है तो यह टाइपएरर बढ़ाएगा। चूंकि जटिल संख्याओं के साथ विभाजन परिभाषित किया गया है, इसलिए यह समझ में आता है कि विभाजक के लिए जटिल संख्या पारित होने पर विभाजन विफल नहीं हुआ है।

>>> 1 / float(2)
0.5
>>> 1 / float(2j)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: can't convert complex to float

यह आपके कोड को और अधिक भंगुर बनाने के उद्देश्य से मुझे ज्यादा समझ में नहीं आता है।

आप पायथन को -Qnew फ्लैग के साथ भी चला सकते हैं, लेकिन इसमें नए पायथन 3 व्यवहार के साथ सभी मॉड्यूल को निष्पादित करने का नकारात्मक पक्ष है, और आपके कुछ मॉड्यूल क्लासिक डिवीजन की अपेक्षा कर सकते हैं, इसलिए मैं परीक्षण के अलावा इसे अनुशंसा नहीं करता हूं। लेकिन प्रदर्शन करने के लिए:

$ python -Qnew -c 'print 1/2'
0.5
$ python -Qnew -c 'print 1/2j'
-0.5j

यह भी काम करेगा

यू = 1. / 5 प्रिंट यू

0.2

24 दिसंबर '13 को 1 9:58 को उत्तर अग्रवाल 6,7172279140 का उत्तर दिया

धन्यवाद गौरा, यह चाल है और काफी साफ समाधान है। यदि संख्यात्मक और denominator दोनों चर हैं, तो "समाधान" गुणा करके 1. गुणा कर सकते हैं।

उदाहरण:

aa = 2
bb = 3

aa / bb = 0

1. * aa / bb = 0.6666666666666666

;-)

मैक्स - इटली


पायथन 3.x में, एकल स्लैश ( / ) हमेशा सत्य (गैर-छंटनी) विभाजन का मतलब है। ( // ऑपरेटर का उपयोग विभाजन को छंटनी के लिए किया जाता है।) पायथन 2.x (2.2 और ऊपर) में, आप एक ही व्यवहार कर सकते हैं

from __future__ import division

अपने मॉड्यूल के शीर्ष पर।


फ़्लोटिंग पॉइंट नंबर इंगित करने के लिए एक बिंदु ( . ) जोड़ें

>>> 4/3.
1.3333333333333333

या

>>> from __future__ import division
>>> 4/3
1.3333333333333333

यदि आप डिफ़ॉल्ट रूप से "सत्य" (फ़्लोटिंग पॉइंट) विभाजन का उपयोग करना चाहते हैं, तो कमांड लाइन ध्वज है:

python -Q new foo.py

कुछ कमियां हैं (पीईपी से):

यह तर्क दिया गया है कि डिफ़ॉल्ट को बदलने के लिए एक कमांड लाइन विकल्प बुरा है। यह निश्चित रूप से गलत हाथों में खतरनाक हो सकता है: उदाहरण के लिए, किसी तीसरे पक्ष के लाइब्रेरी पैकेज को गठबंधन करना असंभव होगा, जिसके लिए आवश्यक है- एक दूसरे के साथ क्यूई-क्यूल्ड।

आप अन्य झंडे के मूल्यों के बारे में अधिक जान सकते हैं जो पाइथन मैन पेज को देखकर विभाजन के व्यवहार के बारे में / चेतावनी देते हैं।

विभाजन परिवर्तनों पर पूर्ण विवरण के लिए पढ़ें: पीईपी 238 - डिवीजन ऑपरेटर बदलना


यदि आप दो पूर्णांक पाइथन का विभाजन करते हैं तो आपको एक पूर्णांक वापस कर देगा, तो आपको यह करने की आवश्यकता है:

c = float(a)/b

या

c = a/float(b)

और फिर c को एक float प्रकार के रूप में प्राप्त करें


>>> from __future__ import division
>>> a = 4
>>> b = 6
>>> c = a / b
>>> c
0.66666666666666663

c = a / (b * 1.0)

from operator import truediv

c = truediv(a, b)

जहां लाभांश है और बी divisor है। यह फ़ंक्शन आसान है जब दो पूर्णांक के विभाजन के बाद भाग्य एक फ्लोट है।







python-2.x