Bankéřovo zaokrouhlování

Zaokrouhlování, ačkoliv se to nemusí zdát, není až tak jednoduché a intuitivní jak by se mohlo na první pohled zdát…

Všichni víme jak se matematicky zaokrouhluje: 0 až 4 dolů, 5 až 9 nahoru.

To je matematické zaokrouhlení. Diky tomu pak round(2.3) === 2 a round(2.7) === 3.

Až sem cajk

Legrace nastáva v momentě, kdy začnete matematicky zaokrouhlovat číslo s pěti desetinami. Třeba round(2.5) nebo round(3.5).

Podle toho co nás učili ve škole, se 2.5 zaokrouhlí na 3 a 3.5 na 4.

No a tak to funguje v JavaScriptu, TypeScriptu, Go.

Ale ne úplně už v Pythonu. Respektive ve 2.X verzi Pythony zaokrouhleni funguje jako všude jinde.

Od 3.X verze se zavedlo bankéřovo zaokrouhlování, takže výsledek zaokrouhlení čísla s pěti desetinami bude pokaždé jiný, podle toho jaké číslo zaokrouhlujete.

Pokud zaokrouhlujete sudé číslo, pak se výsledek zaokrouhlí dolů round(2.5) === 2, ale pokud budete zaokrouhlovat liché číslo, pak se výsledek zaokrouhlí nahoru round(3.5) === 4.

Takže bacha! Pokud píšete v v trojkove verzi Pythonu, nebude vám sedět matematické zaokrouhlování vašemu očekávání. Dobré vědět.

Jeden by řekl stejný kód…