Bir kayan nokta değerinin tam sayı olup olmadığını kontrol etmek için şu float.is_integer()yöntemi kullanın :
>>> (1.0).is_integer()
True
>>> (1.555).is_integer()
False
Yöntem floatPython 2.6 tipine eklendi .
Python 2'de, dikkat edilmesi gerekenler, 1/3ise 0, (a (! Tamsayı işlenenler için zemin bölme) ve kayar nokta aritmetik kesin olmayan olabileceğini floatikili kesirler kullanarak yaklaşık bir değerdir değil kesin gerçek sayı). Ancak döngünüzü biraz ayarlamak bu sağlar:
>>> for n in range(12000, -1, -1):
... if (n ** (1.0/3)).is_integer():
... print n
...
27
8
1
0
Bu da, yukarıda belirtilen kesinsizlik nedeniyle 3'den fazla küpün (10648 dahil) kaçırıldığı anlamına gelir:
>>> (4**3) ** (1.0/3)
3.9999999999999996
>>> 10648 ** (1.0/3)
21.999999999999996
Bunun yerine tam sayıya yakın sayıları kontrol etmeniz veya float()numaranızı bulmak için kullanmamanız gerekir. Küp kökü yuvarlamak gibi 12000:
>>> int(12000 ** (1.0/3))
22
>>> 22 ** 3
10648
Python 3.5 veya daha yenisini kullanıyorsanız, kayan nokta değerinin yapılandırılabilir kenar boşluğu içinde olup olmadığını görmek için math.isclose()işlevi kullanabilirsiniz :
>>> from math import isclose
>>> isclose((4**3) ** (1.0/3), 4)
True
>>> isclose(10648 ** (1.0/3), 22)
True
Daha eski sürümler için, PEP485'te belirtildiği gibi bu işlevin naif uygulaması (hata kontrolünü ve sonsuzluğu ve NaN'yi atlamak) :
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)