Determining whether an value is a whole number in Python

x % 3 == 0 will be True if x / 3 is an integer.


Edit: As Ollie pointed out in the comment below this post, is_integer is part of the standard library and should therefore not be reimplemented as I did below.

This function uses the fact that every other whole number will have at least one number divisible by two with no remainder. Any non-zero fractional representation in either n or n+1 will cause both n%2 and (n+1)%2 to have a remainder. This has the benefit that whole numbers represented as float values will return True. The function works correctly for positive and negative numbers and zero as far as I can determine. As mentioned in the function, it fails for values very close to an integer.

def isInteger(n):
    """Return True if argument is a whole number, False if argument has a fractional part.

    Note that for values very close to an integer, this test breaks. During
    superficial testing the closest value to zero that evaluated correctly
    was 9.88131291682e-324. When dividing this number by 10, Python 2.7.1 evaluated
    the result to zero"""

    if n%2 == 0 or (n+1)%2 == 0:
        return True
    return False

if x % 3 == 0:
    print 'x is divisible by 3'

Integers have no decimals. If you meant "check if a number got decimals in Python", you can do:

not float(your_number).is_integer()