Python Language Math Module Rounding: round, floor, ceil, trunc

Help us to keep this website almost Ad Free! It takes only 10 seconds of your time:
> Step 1: Go view our video on YouTube: EF Core Bulk Insert
> Step 2: And Like the video. BONUS: You can also share it!

Example

In addition to the built-in round function, the math module provides the floor, ceil, and trunc functions.

x = 1.55
y = -1.55

# round to the nearest integer
round(x)       #  2
round(y)       # -2

# the second argument gives how many decimal places to round to (defaults to 0)
round(x, 1)    #  1.6
round(y, 1)    # -1.6

# math is a module so import it first, then use it.
import math

# get the largest integer less than x
math.floor(x)  #  1
math.floor(y)  # -2

# get the smallest integer greater than x
math.ceil(x)   #  2
math.ceil(y)   # -1

# drop fractional part of x
math.trunc(x)  #  1, equivalent to math.floor for positive numbers
math.trunc(y)  # -1, equivalent to math.ceil for negative numbers
Python 2.x2.7

floor, ceil, trunc, and round always return a float.

round(1.3)  # 1.0

round always breaks ties away from zero.

round(0.5)  # 1.0
round(1.5)  # 2.0
Python 3.x3.0

floor, ceil, and trunc always return an Integral value, while round returns an Integral value if called with one argument.

round(1.3)      # 1
round(1.33, 1)  # 1.3

round breaks ties towards the nearest even number. This corrects the bias towards larger numbers when performing a large number of calculations.

round(0.5)  # 0
round(1.5)  # 2

Warning!

As with any floating-point representation, some fractions cannot be represented exactly. This can lead to some unexpected rounding behavior.

round(2.675, 2)  # 2.67, not 2.68!

Warning about the floor, trunc, and integer division of negative numbers

Python (and C++ and Java) round away from zero for negative numbers. Consider:

>>> math.floor(-1.7)
-2.0
>>> -5 // 2
-3


Got any Python Language Question?