जाँच करने के लिए कि क्या एक फ्लोट मान पूरी संख्या है, float.is_integer()
विधि का उपयोग करें :
>>> (1.0).is_integer()
True
>>> (1.555).is_integer()
False
विधि को float
पायथन 2.6 में प्रकार में जोड़ा गया था ।
खाता कि अजगर 2 में, में रखना 1/3
है 0
(पूर्णांक ऑपरेंड के लिए फर्श विभाजन!), और चल बिन्दु अंकगणितीय अनिश्चित हो सकता है कि (क float
द्विआधारी भिन्न, का उपयोग करते हुए एक सन्निकटन है नहीं एक सटीक वास्तविक संख्या)। लेकिन आपके पाश को थोड़ा समायोजित करना यह देता है:
>>> for n in range(12000, -1, -1):
... if (n ** (1.0/3)).is_integer():
... print n
...
27
8
1
0
जिसका अर्थ है कि 3 क्यूबेड (10648 सहित) से अधिक कुछ भी पूर्वोक्त दोष के कारण छूट गया था:
>>> (4**3) ** (1.0/3)
3.9999999999999996
>>> 10648 ** (1.0/3)
21.999999999999996
आपको इसके बजाय पूरे नंबर के करीब के नंबरों की जांच करनी होगी , या float()
अपना नंबर खोजने के लिए उपयोग नहीं करना चाहिए। घनमूल को नीचे घुमाने की तरह 12000
:
>>> int(12000 ** (1.0/3))
22
>>> 22 ** 3
10648
यदि आप पायथन 3.5 या नए का उपयोग कर रहे हैं, तो आप math.isclose()
फ़ंक्शन का उपयोग यह देखने के लिए कर सकते हैं कि क्या एक फ्लोटिंग पॉइंट वैल्यू एक कॉन्फ़िगर करने योग्य मार्जिन के भीतर है:
>>> from math import isclose
>>> isclose((4**3) ** (1.0/3), 4)
True
>>> isclose(10648 ** (1.0/3), 22)
True
पुराने संस्करणों के लिए, PEP485 में उल्लिखित उस फ़ंक्शन का अनुभवहीन कार्यान्वयन (अनन्तता की जाँच करने और अनन्तता और NaN को छोड़ना )
def isclose(a, b, rel_tol=1e-9, abs_tol=0.0):
return abs(a - b) <= max(rel_tol * max(abs(a), abs(b)), abs_tol)