Ответ 1
Python 3.x, в отличие от Python 2.x, использует округление Banker для функции round()
.
Это документированное поведение:
[I] f два кратных одинаково близки, округление выполняется по отношению к четному выбору (так, например, как раунд (0,5), так и круглый (-0,5) равны 0, а раунд (1.5) равен 2).
Поскольку числа с плавающей запятой по самой своей природе являются только приближениями, не должно быть слишком важно, как обрабатываются "точные" полуцелые числа - в любом случае всегда могут быть ошибки округления в предыдущих вычислениях.
Изменить. Чтобы получить старое поведение округления, вы можете использовать
def my_round(x):
return int(x + math.copysign(0.5, x))