Округление чисел и его особенности
Небольшая заметка об округлении чисел в 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