Python

3000

Zaokrouhlování

Od Python 3.0 dostala funkce pro zaokrouhlování round() vcelku zvláštní význam. Zaokrouhlení neprobíhá jako v 5. třídě - od 5 nahoru nahoru - ale jako na vysoké škole u statistiků podle pravidla round-to-even:

>>> When dealing with large sets of scientific or statistical data,
>>> where trends are important, traditional rounding on average biases the
>>> data upwards slightly. Over a large set of data, or when many
>>> subsequent rounding operations are performed as in digital signal
>>> processing, the round-to-even rule tends to reduce the total rounding
>>> error, with (on average) an equal portion of numbers rounding up as
>>> rounding down. This generally reduces upwards skewing of the
>>> result."""

Jinými slovy se zde tvrdí, že vzniká při tomto způsobu menší statistická chyba. Ukázka zaokrouhlení metodou round-ti-even:

seznam=[i+0.5 for i in range(9)]
for i in seznam:
    print (i, ":", round(i))

dává:

0.5 : 0
1.5 : 2
2.5 : 2
3.5 : 4
4.5 : 4
5.5 : 6
6.5 : 6
7.5 : 8
8.5 : 8
>>>

Chcete-li dosáhnout obyčejného zaokrouhlení, jak ho znáte ze základní školy, můžete použít následující konstrukci, která přidá funkci round() do modulu math. (tak jak je funguje jen na kladná čísla):

import math
math.round = lambda num, n: math.floor(num*10**n+0.5)/10**n