[Python-Dev] Deprecating float.is_integer()

Serhiy Storchaka storchaka at gmail.com
Wed Mar 21 04:06:08 EDT 2018

I searched usages of is_integer() on GitHub and have found that it is 
used *only* in silly code like (x/5).is_integer(), (x**0.5).is_integer() 
(or even (x**(1/3)).is_integer()) and in loops like:

    i = 0
    while i < 20:
        if i.is_integer():
        i += 0.1

(x/5).is_integer() is an awful way of determining the divisibility by 5. 
It returns wrong result for large integers and some floats. (x % 5 == 0) 
is a more clear and reliable way (or PEP 8 compliant (not x % 5)).

Does anybody know examples of the correct use of float.is_integer() in 
real programs? For now it looks just like a bug magnet. I suggest to 
deprecate it in 3.7 or 3.8 and remove in 3.9 or 3.10. If you even need 
to test if a float is an exact integer, you could use (not x % 1.0). It 
is even faster than x.is_integer().

More information about the Python-Dev mailing list