Пропустить до содержимого

Как использовать функцию round в Python эффективно?

CodeMDD.io

Как округлять числа в Python

Автор: Дэвид Амос, 3 июля 2023 г.


С многими бизнесами, которые обращаются к мощной системе анализа данных Python, понимание того, как избежать введения предвзятости в наборы данных, является абсолютно необходимым. Если вы изучали некоторую статистику, то, вероятно, знакомы с такими терминами, как предвзятость в отчетах, предвзятость выборки и предвзятость выборки. Есть еще один тип предвзятости, который играет важную роль, когда вы работаете с числовыми данными: предвзятость округления.

Понимание того, как работает округление в Python, поможет вам избежать предвзятости в ваших данных. Это важный навык. Ведь делать выводы на основе предвзятых данных может привести к дорогостоящим ошибкам.

Встроенная функция round() в Python

В Python есть встроенная функция round(), которая принимает два числовых аргумента n и ndigits и возвращает число n, округленное до ndigits десятичных знаков. Аргумент ndigits по умолчанию равен нулю, поэтому если его не указывать, получится число, округленное до целого числа. Как вы увидите далее, round() может работать не так, как вы ожидаете.

Большинству людей учат округлять число следующим образом:

  • Округлите число n до p десятичных знаков, сдвинув десятичную точку в числе n на p знаков вправо. Для этого умножьте n на 10ᵖ (10 в степени p), чтобы получить новое число m.

  • Затем посмотрите на цифру d в первом десятичном разряде числа m. Если d меньше 5, округлите m вниз до ближайшего целого числа. В противном случае округлите m вверх.

  • Наконец, сдвиньте десятичную точку обратно на p знаков влево, разделив m на 10ᵖ.

Это алгоритм! Например, число 2.5, округленное до ближайшего целого числа, равно 3. Число 1.64, округленное до одного десятичного знака, равно 1.6.

Теперь откройте интерпретатор и округлите число 2.5 до ближайшего целого числа, используя встроенную функцию round() в Python:

>>> round(2.5)
2

Как видите, результатом является число 2, а не 3, как вы, возможно, ожидали. Это происходит из-за того, что функция round() округляет число к ближайшему четному числу при наличии половинок. В данном случае, число 2.5 является половинкой, и по правилу округления “к ближайшему четному числу” оно округляется вниз до ближайшего четного числа, а именно, до 2.

Алгоритмы округления

Округление чисел в Python может быть реализовано с использованием различных алгоритмов. Давайте рассмотрим несколько вариантов округления и их реализации в чистом Python.

Округление вверх

Округление вверх - это процесс округления чисел в сторону наибольшего целого числа. Если десятичная часть числа больше нуля, то число округляется до следующего целого числа. В противном случае, число уже является целым и не требует округления вверх.

Алгоритм округления вверх можно реализовать с помощью следующей функции:

import math
def round_up(number):
return math.ceil(number)

Пример использования функции round_up():

>>> round_up(2.5)
3
>>> round_up(3)
3

Как видите, число 2.5 было округлено вверх до ближайшего целого числа 3, а число 3 осталось неизменным, так как оно уже является целым числом.

Округление вниз

Округление вниз - это процесс округления чисел в сторону наименьшего целого числа. Если десятичная часть числа больше нуля, то число округляется до предыдущего целого числа. В противном случае, число остается неизменным и не требует округления вниз.

Алгоритм округления вниз можно реализовать с помощью следующей функции:

import math
def round_down(number):
return math.floor(number)

Пример использования функции round_down():

>>> round_down(2.5)
2
>>> round_down(3)
3

Как видите, число 2.5 было округлено вниз до ближайшего целого числа 2, а число 3 осталось неизменным.

Округление до ближайшего четного числа

Округление до ближайшего четного числа - это специальный тип округления, который округляет число к ближайшему целому четному числу. Если десятичная часть числа равна половине, то округление происходит к ближайшему четному числу. В противном случае, округление происходит как обычно.

Алгоритм округления до ближайшего четного числа можно реализовать с помощью следующей функции:

import math
def round_to_even(number):
return math.trunc(number) if number - math.trunc(number) < 0.5 else math.ceil(number)

Пример использования функции round_to_even():

>>> round_to_even(2.5)
2
>>> round_to_even(3.5)
4

Как видите, число 2.5 было округлено до ближайшего целого четного числа 2, а число 3.5 было округлено до ближайшего целого четного числа 4.

Это всего лишь несколько примеров округления чисел в Python. Округление может быть произведено с использованием различных стратегий в зависимости от ваших потребностей и требований задачи. Теперь вы знаете, как реализовать основные стратегии округления с использованием Python. При работе с данными, особенно числовыми данными, помните о предвзятости округления и выбирайте подходящую стратегию округления для вашей задачи.