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…