How to Round Numbers Up/Down/Nearest in Python

Python Round Numbers

This article will show you how to round numbers up, down, and to the nearest 1, 10 100 (or any number) in the Python programming language.

Truncation vs. Rounding

Truncation isn’t technically rounding, but it serves a similar purpose, so I’ll include it here.

It’s the simplest way to shorten a number – just cutting off the characters at the end until it’s in the format you require.

Rounding gets the nearest number, whereas truncation cuts off digits from the number.

For example:

To round 2.9 to the nearest whole number would give 3

To truncate 2.9 to the nearest whole number would give 2

Using The math.trunc() Method to Return the Truncated Integer Part of a Number

The math.trunc() method is part of the Python math library and performs truncation to the nearest integer (whole number). Here it is in action:

# Import the math library
import math 

# print a truncated number
print(math.trunc(3.7)) # Will print the number 3

As it is simply removing all information after the decimal place, it will round any negative number up and any positive number down.

Truncation to a Set Number of Decimals

Python lacks a built-in function for truncating to an arbitrary number of decimals (rather than just the nearest integer as above).

This function fills this role – you can copy and paste it straight into your code.

# Import the math library
import math

# define a function to truncate a number to a given number of decimal places (defaulting to 0 decimal places)
def truncateToDecimals(number, decimals=0):
    if not isinstance(decimals, int):
        raise TypeError("decimals places must be an integer.")
    elif decimals < 0:
        raise ValueError("decimals must be greater than or equal to 0")
    if decimals == 0:
        return math.trunc(number)
    return math.trunc(number * 10.0 ** decimals) / 10.0 ** decimals

Here it is in use:

truncateToDecimals(6.76666, 3) # Will return 6.766

Rounding to A Specified Number of Decimal Places

The Python round() function can be used to round a number to a set number of decimal places.

Here it is in action:

round(8.9873, 2) # Will return 8.99

The round() function accepts 2 parameters – the number to round followed by the number of decimal places to round to. If the number of decimal places is not supplied, it defaults to 0.

Using math.ceil() to Round Up To The Nearest Integer

The math.ceil() method rounds a given number up to the nearest integer.

math.ceil(2.4) # Will return 3
math.ceil(-3.9) # will return -3

It gets the nearest integer that is greater than or equal to the number given to it.

Using math.floor() to Round Down To The Nearest Integer

Conversely, math.floor() rounds a given number down to the nearest integer:

math.floor(2.4) # Will return 2
math.floor(-3.9) # Will return -4

It gets the nearest integer that is less than or equal to the number given to it.

Rounding to the Nearest 2, 10, 5, Whatever

The below functions will accept a number and round it to the nearest whole number in whatever base you want, defaulting to base 10:

In Python 2

def roundToNearest(inputNumber, base=10):
    return int(base * round(float(inputNumber)/base))

In Python 3

def roundToNearest(inputNumber, base=10):
    return base * round(inputNumber/base)

This can be useful if rounding to calculate change for a currency in which the smallest denomination coin is larger than the smallest unit of currency (for example, Australia’s smallest value coin is 5 cents, but the currency allows for prices in 1 cent increments).

Conclusion

That pretty much covers the main rounding methods for Python. There are several popular math and data processing libraries for Python (like NumPy) – I’ll dig into some of the functionality of those in future articles – be sure to subscribe to our Twitter to stay up to date.

Meanwhile, now that you have some rounded numbers why not plot them on a scatter plot?

SHARE:
nv-author-image

Brad Morton

I'm Brad, and I'm nearing 20 years of experience with Linux. I've worked in just about every IT role there is before taking the leap into software development. Currently, I'm building desktop and web-based solutions with NodeJS and PHP hosted on Linux infrastructure. Visit my blog or find me on Twitter to see what I'm up to.

Leave a Reply

Your email address will not be published. Required fields are marked *