Вот точное значение для rint
для Python 2:
def rint(num):
"""Rounds toward the even number if equidistant"""
return round(num + (num % 2 - 1 if (num % 1 == 0.5) else 0))
print rint(-1.4) == -1.0
print rint(-1.5) == rint(-2.0) == rint(-2.5) == -2.0
print rint(1.4) == 1.0
print rint(1.5) == rint(2.0) == rint(2.5) == 2.0
В Python 3 round
округляется до точно так же, как rint
(спасибо @lvc), но в Python 2:
round(x[, n])
Возвращает значение с плавающей запятой x
, округленное до n
цифр после запятой. Если n
опущено, по умолчанию используется ноль. Результатом является число с плавающей запятой. Значения округляются до ближайшего кратного 10 к степени минус n
; если два множителя одинаково близки, округление производится вдали от 0 (например, round(0.5)
равно 1.0
и round(-0.5)
равно -1.0
).
Примечание
Поведение round()
для чисел с плавающей запятой может быть удивительным: например, round(2.675, 2)
дает 2.67
вместо ожидаемого 2.68
. Это не ошибка: это результат того факта, что большинство десятичных дробей не могут быть представлены точно как число с плавающей точкой. См. Арифметика с плавающей точкой: проблемы и ограничения для получения дополнительной информации.