Функция round() в Python: округление на примерах
В этом уроке вы узнаете, как использовать функцию Python round() для округления числа.
- Что такое функция round() в Python?
- Примеры функции round() в Python
- 1) Простой пример
- 2) Пример round() с отрицательным ndigits
- 3) Пример функции round() со связями
- Как округлить от нуля
Что такое функция round() в Python?
Округление означает упрощение числа, но сохранение его значения близким к исходному. Например, 89, округленное до ближайших десяти, равно 90, потому что 89 ближе к 90, чем к 80.
Чтобы округлить число в Python, вы используете встроенную функцию round():
round(number [, ndigits])
Функция round() округляет число до ближайшего числа, кратного 10-ndigits. Другими словами, функция round() возвращает число, округленное до точности n цифр после десятичной точки.
Если ndigits отсутствует или None, round() вернет ближайшее целое число.
Примеры функции round() в Python
Давайте рассмотрим несколько примеров, чтобы лучше понять функцию round().
1) Простой пример
В следующем примере функция round() используется без передачи ndigits:
round(1.25)
Выход:
1
Она возвращает целое число 1.
Однако если вы передадите ndigits как ноль, функция round() вернет число с плавающей запятой 1,0:
round(1.25, 0)
Выход:
1.0
Ниже показано, как работает функция round():
Поскольку ndigits равно нулю, функция round() округляет число 1,25 до ближайшего кратного 10-(0) = 1.
2) Пример round() с отрицательным ndigits
В следующем примере функция round() используется с отрицательным ndigits:
round(15.5, -1)
ndigits равно -1, функция round() округляет число 15,5 до ближайшего числа, кратного 20 (10-(-1))):
Поскольку 15,5 находится между 10 и 20 (кратным 10), оно ближе к 20. Следовательно, функция round() возвращает 20.
3) Пример функции round() со связями
Когда вы округляете число, находящееся между двумя числами, Python не может найти ближайшее число.
Например, если округлить число 1,25 до n, равного 1. Ближайшего числа не будет:
В этом случае Python использует стандарт IEEE 754 для округления, называемый банковским округлением. При банковском округлении число округляется до ближайшего значения, при этом связи округляются до ближайшего значения с четной наименьшей значащей цифрой. Как правило, наименее значащая цифра в числе — это самая правая цифра.
Такое округление основано на идее, что статистически 50% выборки чисел округляются в большую сторону, а 50% — в меньшую.
Например:
round(1.25, 1)
Он возвращает 1,2
Потому что наименьшая четная цифра для 1,2 равна 2:
Аналогично, округление 1,35 вернет 1,4:
round(1.35, 1)
Python использует банковское округление, но не округление от нуля, поскольку оно менее предвзятое.
Например, если вы усредняете три числа 1,5, 2,5 и 3,5, округление от нуля возвращает 3,0, а округление банкира возвращает 2,66:
Число | Банковское округление | Округление от нуля |
---|---|---|
1,5 | 2 | 2 |
2,5 | 2 | 3 |
3,5 | 4 | 4 |
Среднее | 2,66666… | 3.0 |
Как округлить от нуля
Python не предоставляет прямого способа округления числа от нуля, как вы могли ожидать. Например:
Число | Округление от нуля |
---|---|
1.2 | 1 |
1,5 | 2 |
Распространенный способ округления числа от нуля — использование следующего выражения:
int(x + 0.5)
Это выражение корректно работает для положительных чисел. Например:
print(int(1.2 + 0.5)) print(int(1.5 + 0.5))
Выход:
1 2
Однако оно не работает для отрицательных чисел:
print(int(-1.2 + 0.5)) print(int(-1.5 + 0.5))
Выход:
0 -1
Для отрицательных чисел следует вычитать 0,5 вместо того, чтобы прибавлять.
Следующий пример правильно работает для отрицательных чисел:
print(int(-1.2 - 0.5)) print(int(-1.5 - 0.5))
Ниже определяется вспомогательная функция, которая округляет число:
def round_up(x): if x > 0: return int(x + 0.5) return int(x - 0.5)
Математический модуль math в Python предоставляет вам функцию copysign():
math.copysign(x, y)
Функция copysign() возвращает абсолютное значение x, но знак y.
И вы можете использовать эту функцию copysign() для разработки функции round_up() без проверки, является ли x положительным или отрицательным:
from math import copysign def round_up(x): return int(x + copysign(0.5, x))