Округление чисел и его особенности

Небольшая заметка об округлении чисел в Python 3.

Округлением чисел в Python занимается встроенная функция round.

round(number[, ndigits]) - округляет число number до ndigits знаков после запятой (по умолчанию, до нуля знаков, то есть, до ближайшего целого)

>>> round(1.5)
2
>>> round(2.5)
2
>>> round(2.65, 1)
2.6
>>> round(2.75, 1)
2.8

Тут есть одна особенность, о которой нужно знать, и о которой часто забывают.

Со школы многие привыкли, что, когда (N + 1) знак = 5, а последующие знаки равны нулю, округление производится всегда в большую по модулю сторону.

Однако, как видно из примеров, в Python это не так. Здесь используется так называемое "Банковское округление", то есть округление к ближайшему чётному.

На практике это оказывается не так уж и важно, например:

>>> round(2.85, 1)
2.9

Что-то не так, правда? На самом деле, всё именно так, как и задумывалось. Просто из-за проблем с точностью чисел с плавающей точкой это число чуть больше, чем 2.85, а потому округляется до 2.9.

>>> from fractions import Fraction
>>> a = Fraction(2.85)
>>> b = Fraction('2.85')
>>> a == b
False
>>> a > b
True

Обсуждение вопросов, не связанных со статьёй (в т.ч. комментарии типа "Помогите!"), ведётся на форуме pythonworld.club, а не в комментариях.

Для вставки кода на Python в комментарий заключайте его в теги <pre><code class="python3">Ваш код</code></pre>
Опечатка в тексте:
Послать сообщение об ошибке автору?