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.