একটি ভাসমান মান একটি সম্পূর্ণ সংখ্যা কিনা তা পরীক্ষা করতে, float.is_integer()
পদ্ধতিটি ব্যবহার করুন :
>>> (1.0).is_integer()
True
>>> (1.555).is_integer()
False
float
পাইথন ২.6- তে এই পদ্ধতিটি যুক্ত করা হয়েছিল ।
অ্যাকাউন্ট পাইথন 2, মধ্যে নিতে 1/3
হয় 0
(পূর্ণসংখ্যা operands জন্য মেঝে বিভাজন!), এবং ফ্লোটিং পয়েন্ট গাণিতিক যথাযথ নয় এমন হতে পারে যে (ক 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
পুরানো সংস্করণগুলির জন্য, পিইপি 485-তে উল্লিখিত ফাংশনটির নিষ্পাপ বাস্তবায়ন (ত্রুটি যাচাই এবং এফএনটি উপেক্ষা করে এড়িয়ে যাওয়া) :
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)