Активное использование десятичных дробей в вычислениях нередко приводит к образованию очень длинных чисел с большим количеством знаков после запятой. Описанная ситуация достаточно часто возникает при разработке программного обеспечения на Python. Самым простым и эффективным способом сделать программу удобнее для использования становится округление до целого числа или разумного количества знаков после запятой. Дополнительным требованием к выполняемой операции становится точность, благодаря которой удается избежать искажения результатом. Поэтому имеет смысл рассмотреть более внимательно, как выполняется округление в Python и какие методы для этого используется. Вместе с описанием особенностей и сферы применения каждого.
Наиболее часто для округления используется встроенная в функционал Python опция в виде оператора round(). Стандартный синтаксис программного кода с его применением выглядит следующим образом: round (number, digits), где первым аргументом функции (number) выступает округляемое дробное число, а вторым (digits) – становится количество знаков после запятой. Если значение последнего отсутствует, оно по умолчанию считается равным нулю.
round(6.4457, 2) # 6,45
Еще одним быстрым, но при этом весьма неточным методом округления выступает оператор int(). Его функционал позволяет просто отбросить дробную часть числа, указанного в качестве аргумента. Основным недостатком функции является низкая точность, так как любые цифры – от 1 до 9 всегда округляются в сторону уменьшения. Если подобных операций выполняется несколько или полученный результат возводится в степень (неоднократно умножается), на выходе накапливается очень существенная погрешность. Причиной возникновения которой становится элементарное несоблюдение математических правил.
int(7.1) # 7
int(7.9) # 7
int(7.899) # 7
Что в полной мере справедливо в отношении отрицательных чисел. Ошибка накапливается и при их округлении.
int(-7.1) # -7
int(-7.9) # -7
int(-7.899) # -7
Для увеличения точности вычислений можно использовать относительно простое дополнение к функции int(). Оно приводит к добавлению к исходному аргументу 0,5 (для положительных чисел) и -0,5 (для отрицательных). Что позволит выполнять округление в соответствии с правилами математики. Минусом такого решения становится необходимость писать дополнительный код.
def correct_rounding(number):
if nimber > 0:
return int(number + 0.5)
else:
return int(number + -0.5)
correct_rounding(7.1) # 7
correct_rounding(7.7) # 8
correct_rounding(-7.1) # -7
correct_rounding(-7.8) # -8
Удачной альтернативой программирования дополнительных функций становится подключение встроенной в Питон библиотеки под названием math. Последнее наглядно демонстрирует математическую направленность модуля. Внутри которого предусмотрено сразу три функции для точного и быстрого округления:
Функционал операторов прост и понятен. Остается рассмотреть особенности практического применения каждого из них, причем лучше сделать это по отдельности.
Задействование функции всегда приводит к округлению в большую сторону. Что в равной степени работает в отношении как положительных, так и отрицательных чисел.
import math
math.ceil(25.1) # 26
math.ceil(25.5) # 26
math.ceil(25.9) # 26
import math
math.ceil(-25.1) # -25
math.ceil(-25.5) # -25
math.ceil(-25.9) # -25
Все сказанное выше справедливо и в данном случае. Но с одним очень важным уточнением: оно работает в сторону уменьшения, а не увеличения. Как с положительными, так и отрицательными числами.
import math
math.floor(25.1) # 25
math.floor(25.5) # 25
math.floor(25.9) # 25
import math
math.floor(-25.1) # -26
math.floor(-25.5) # -26
math.floor(-25.9) # -26
Данная функция очень похожа на описанный ранее оператор грубого округления int(). Ее использование приводит к простому отбрасыванию дробной части. Поэтому применение функции ограничивается теми программами, где точность не является приоритетной, или полученное значение не используется в дальнейших вычислениях.
Самым точным методом округления, доступным при программировании на Пайтоне, заслуженно считается задействование модуля decimal. Он позволяет избежать характерных для Python неточностей и вариативности в проводимой операции. Подключение модуля гарантирует выполнение округления с абсолютным соблюдением всех правил математики. По крайней мере, актуальных для данной версии языка программирования.
Использование decimal предусматривает применение встроенного метода quantize. Его функционал требует указания шаблона, в соответствии с которым осуществляется выдача итогового результата. На практике это выглядит следующим образом (где число 1.000 выступает в качестве шаблона, который показывает необходимость оставления трех знаков после запятой).
From decimal import *
number = Decimal(“3,5648575”)
number = number.quantize(Decimal(“1.000”)) # 3.565
Принципы работы встроенной функции round() разнятся для различных версий языка программирования. В Python 2 используются традиционные для математики правила. То есть округление цифр с 1 по 4 ведется в сторону уменьшения, с 5 по 9 – увеличения.
В последней версии программы – Пайтон 3 – округление ведется по так называемому банковскому методу. То есть цифра 5 может округляться как в сторону увеличения, так и уменьшения, так как заменяется на ближайшее четное число. Например, 3,5 – на 4 или 6,5 – на 6.
По состоянию на сегодняшний день намного чаще применяется Python 3. Поэтому используемые им правила округления считаются более актуальными. Несколько примеров их практического задействования представлены на скриншоте ниже.
round(7) # 7
round(7.5) # 8
round(7.56986, 2) #7.57
Отдельно стоит отметить, что оператор аналогичным образом применяется в отношении отрицательных чисел. Примеры округления представлены ниже.
round(-7) # -7
round(-7.5) # -8
round(-7.56986, 2) #-7.57
Еще одно важное отличие в версиях языка программирования касается округления с помощью функции ceil() из math. В Питоне 2 оператор возвращает число с плавающей точкой после запятой (float), в третьей версии – целое (int).
Программирование на Питоне предъявляет к разработчику минимальный набор требований, которые – при должном отношении к делу – вполне реально выполнить. Причем с разумным уровнем необходимых трудозатрат. Самый простой и эффективный способ освоить разработку ПО на Python в сегодняшних условиях – подготовка на тематических онлайн-курсах. Некоторые из числа самых интересных кратко описаны ниже и доступны для заказа через Сравни. Причем практически для каждого из них пользователям нашего финансового маркетплейса предоставляются скидки и другие бонусы от учебного центра.
Длительность обучения: 9 месяцев.
Основные преимущества программы подготовки:
Длительность обучения: 2 месяца.
Основные преимущества программы подготовки:
Длительность обучения: 12 месяцев.
Основные преимущества программы подготовки:
Действие осуществляется при проведении различных вычислений, где используются десятичные дроби, с целью сокращения или полного исключения цифр после запятой.
Их несколько: встроенная опция round(), функция отбрасывания дробной части int(), дополнительные модули для языка программирования math и decimal.
Из-за комплекса причин, включая: универсальность, легкость освоения, удобство использования, сочетаемость с другими языками и т.д.
Проще всего пройти обучение на одном из многочисленных курсах подготовки, перечень которых размещен на нашем сайте.