मैं पायथन में फ्लोटिंग पॉइंट होने के लिए विभाजन को कैसे बाध्य कर सकता हूं?
मेरे दो पूर्णांक मान हैं a और b, लेकिन मुझे फ्लोटिंग पॉइंट में उनके अनुपात की आवश्यकता है। मुझे पता है कि एक <b और मैं 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
मॉड्यूल truediv
से भी मजबूत है , लेकिन यह संभावना धीमी है क्योंकि यह एक फ़ंक्शन कॉल है:operator
operator.truediv(a, b)
>>> from operator import truediv
>>> truediv(1, 2)
0.5
पायथन 2 के लिए अनुशंसित नहीं
आमतौर पर देखा जाता है a / float(b)
। यदि बी एक जटिल संख्या है, तो यह TypeError बढ़ाएगा। चूंकि जटिल संख्याओं के साथ विभाजन को परिभाषित किया गया है, इसलिए यह मुझे समझ में आता है कि विभाजक के लिए एक जटिल संख्या पारित होने पर विभाजन विफल नहीं होना चाहिए।
>>> 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