float 값이 정수인지 확인하려면 다음 float.is_integer()
방법을 사용하십시오 .
>>> (1.0).is_integer()
True
>>> (1.555).is_integer()
False
이 메소드는 float
Python 2.6 에서 유형에 추가되었습니다 .
파이썬 2 것을 고려 1/3
이다 0
(a는 (! 정수 피연산자 바닥 부문) 및 소수점 연산 부동 부정확가 될 수 있다는 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
Python 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)