#
Python 3, an Illustrated Tour Transcripts

Chapter: Numbers

Lecture: Rounding

Login or
purchase this course
to watch this video and the rest of the course contents.

0:00
In this video, we're going to talk about rounding. Let's read from what's new in Python 3

0:06
the round function, rounding strategy in return type have changed, exact halfway cases are now rounded to the nearest even result

0:14
instead of away from 0, for example round 2.5 now returns 2 rather than 3. So if you're not familiar with this, this is called banker's rounding

0:25
and we round towards the nearest even number so round 2.5, 2 is even 3 is not even, so it's going to round it to 2.

0:34
Round 3.5, 3 is not even 4 is, so it's going to round it to 4. And why is this called banker's rounding

0:41
is because if you're rounding and you're in a bank and you always round up you're going to bias towards the high end

0:47
and you're biased towards more than what you actually have. If you round towards even, then you're alternating

0:53
and presumably your bias is going to offset one another and in the end you'll come out more accurate. That's the theory behind rounding towards even.

1:03
And here's just a slide that says what I just said to the nearest even number is called banker's rounding it tries to eliminate bias to rounding high.

1:12
One thing to be aware of is this, note in the Python docs it says the behavior of round for floats can be surprising

1:19
for example, round 2.6752 gives to 2.67 instead of the expected 2.68 this is not a bug, it's a result of the fact that most decimal fractions

1:31
can't be represented exactly as a float. So what's going under the covers there is that 2.675 if you create a number that represents that

1:43
it's actually going to be closer to 2.67 than 2.68 and so when you round it to two places,

1:50
Python is going to note that and it's going to round it correctly, even though to us users, who at least in the US,

1:57
I think it's a US-centric view that you round up and this is rounding to what's more close, even though 2.675 seems closer to some people to 2.68.

2:09
Here's an example of that. I can say round 0.5 to 1 digit and round .15 to 1 digit of precision

2:17
those both round to .1 and that's because under the covers the float number that represents them is actually closer to those numbers

2:26
than the other option for rounding. So this is something that's new in Python 3.

2:32
I personally ran into this when I was doing some work on porting some Excel spreadsheets and so interesting behavior here,

2:40
but again, the bias is towards being more correct in the average term rather than always rounding up.