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

## 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
``````