Using Python round()

Python Round Function

The Python round() function is very useful when we want to perform a rounding operation.

Often, you’d want to quickly estimate the value by rounding or reduce long floating-point decimals. round() is especially beneficial in this case.

Let’s look at how we can use it, along with some examples!


Syntax of Python round() function

The function is very simple. It takes a number, and outputs the desired rounded number.

round(num, [ndigits])

Here, we need to round num, so we pass it to round(). We can also specify the precision of the rounding using ndigits. This will ensure that the number will be rounded to ndigits precision after the decimal point.

If you want to round it to integer values, you don’t need to provide this value. In this case, the nearest Integer value will be returned.

Also, if the number is of the form x.5, then, the values will be rounded up if the roundup value is an even number. Otherwise, it will be rounded down.

For example, 2.5 will be rounded to 2, since 2 is the nearest even number, and 3.5 will be rounded to 4.

With that covered, let’s look at some examples:


Examples of Python round()

There are some cases to consider, so let’s go about it one by one.

1. Integer Rounding

The below snippet shows how we can round numbers to the nearest integer.

print(round(5, 2)) # Round 5 upto 2 decimal places. But 5 is already an integer!
print(round(6.4))
print(round(7.7))
print(round(3.5))

Output

5
6
8
4

2. Rounding to even side

As mentioned earlier, if both the even and the odd sides are equally close to the number (x.5), then rounding will happen to the even side.

print(round(10.5))
print(round(11.5))

Output

10
12

3. Rounding with ndigit=None

If the ndigit argument is not specified (or None), rounding will happen to the nearest integer.

print(round(2.5)) # Rounding will happen to the nearest even number
# OR
print(round(2.5, None))

Output

2
2

4. Rounding with ndigit < 0

We can also pass a negative value for the ndigit argument. This will start rounding from the left of the decimal point!

So, if our original number has 3 digits after the decimal point, passing ndigit = -3 will remove those 3 digits before the decimal point and replace then with 0, giving us 0!

print(round(123.456, 0))
print(round(123.456, -1))
print(round(123.456, -2))
print(round(123.456, -3))

Output

123
120.0
100.0
0.0

Anomalies on rounding with floating-point numbers

Since floating-point numbers are defined by their precision, Python approximates these numbers during calculations. Due to these approximations, rounding them can give us unexpected results sometimes.

Consider the below block, where the results can be surprising:

>>> 0.1 + 0.1 == 0.2
True
>>> 0.1 + 0.1 + 0.1 == 0.3
False
>>> 0.1 + 0.1 + 0.1 + 0.1 == 0.4
True

Let’s take a look at some more examples:

>>> print(round(21.575, 2))
21.57
>>> print(round(1.23546, 2))
1.24
>>> print(round(-1.2345, 2))
-1.23

Again, due to the approximation of floating point, we don’t get the exact output. In the first case, we would have expected 21.58, but we only got 21.57.

Due to this, always be careful when dealing with floating points, as these small changes in output may give you huge problems own the line.


Using Python round() on custom objects

The Python round() method internally calls the __round__() dunder method.

We can override this method if we’re building a custom class. Therefore, any call of round() on our object will go to this overriding method instead.

Let’s take a quick look at building our own custom rounder!

class MyClass:
    def __init__(self, data):
        assert type(data) == type([])
        self.data = data # Assume List type data of numbers
    def __round__(self, num_digits=None):
        for idx in range(len(self.data)):
            self.data[idx] = round(self.data[idx], num_digits)
        return self

my_obj = MyClass([12.34, 12.345, 10.5])
my_obj = round(my_obj)
print(my_obj.data)

Output

[12, 12, 10]

As you can see, we were able to implement our own custom rounding function for the MyClass object!


Conclusion

In this article, we learned about using the round() function in Python, using various examples.

References