Taking the floor of a float

I have found two ways of taking floors in Python:

3.1415 // 1

and

import math
math.floor(3.1415)

The problem with the first approach is that it return a float (namely 3.0). The second approach feels clumsy and too long.

Are there alternative solutions for taking floors in Python?


Solution 1:

As long as your numbers are positive, you can simply convert to an int to round down to the next integer:

>>> int(3.1415)
3

For negative integers, this will round up, though.

Solution 2:

You can call int() on the float to cast to the lower int (not obviously the floor but more elegant)

int(3.745)  #3

Alternatively call int on the floor result.

from math import floor

f1 = 3.1415
f2 = 3.7415

print floor(f1)       # 3.0
print int(floor(f1))  # 3
print int(f1)         # 3
print int(f2)         # 3 (some people may expect 4 here)
print int(floor(f2))  # 3

http://docs.python.org/library/functions.html#int

Solution 3:

The second approach is the way to go, but there's a way to shorten it.

from math import floor
floor(3.1415)