logo
Ещё

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

Активное использование десятичных дробей в вычислениях нередко приводит к образованию очень длинных чисел с большим количеством знаков после запятой. Описанная ситуация достаточно часто возникает при разработке программного обеспечения на Python. Самым простым и эффективным способом сделать программу удобнее для использования становится округление до целого числа или разумного количества знаков после запятой. Дополнительным требованием к выполняемой операции становится точность, благодаря которой удается избежать искажения результатом. Поэтому имеет смысл рассмотреть более внимательно, как выполняется округление в Python и какие методы для этого используется. Вместе с описанием особенностей и сферы применения каждого.

Функция round() в Python

Наиболее часто для округления используется встроенная в функционал Python опция в виде оператора round(). Стандартный синтаксис программного кода с его применением выглядит следующим образом: round (number, digits), где первым аргументом функции (number) выступает округляемое дробное число, а вторым (digits) – становится количество знаков после запятой. Если значение последнего отсутствует, оно по умолчанию считается равным нулю.

round(6.4457, 2) # 6,45

Функция int() в Python

Еще одним быстрым, но при этом весьма неточным методом округления выступает оператор 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 в Python

Удачной альтернативой программирования дополнительных функций становится подключение встроенной в Питон библиотеки под названием math. Последнее наглядно демонстрирует математическую направленность модуля. Внутри которого предусмотрено сразу три функции для точного и быстрого округления:

  • ceil() – аргумент оператора округляется в сторону увеличения;
  • floor() – операция осуществляется в меньшую сторону;
  • trunc() – отбрасывается дробная часть числа.

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

math.ceil

Задействование функции всегда приводит к округлению в большую сторону. Что в равной степени работает в отношении как положительных, так и отрицательных чисел.

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

math.floor

Все сказанное выше справедливо и в данном случае. Но с одним очень важным уточнением: оно работает в сторону уменьшения, а не увеличения. Как с положительными, так и отрицательными числами.

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

math.trunc

Данная функция очень похожа на описанный ранее оператор грубого округления int(). Ее использование приводит к простому отбрасыванию дробной части. Поэтому применение функции ограничивается теми программами, где точность не является приоритетной, или полученное значение не используется в дальнейших вычислениях.

decimal в Python

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

Использование decimal предусматривает применение встроенного метода quantize. Его функционал требует указания шаблона, в соответствии с которым осуществляется выдача итогового результата. На практике это выглядит следующим образом (где число 1.000 выступает в качестве шаблона, который показывает необходимость оставления трех знаков после запятой).

From decimal import *

number = Decimal(“3,5648575”)

number = number.quantize(Decimal(“1.000”)) # 3.565

Округления в Python 2 и Python 3 – различия

Принципы работы встроенной функции 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 в сегодняшних условиях – подготовка на тематических онлайн-курсах. Некоторые из числа самых интересных кратко описаны ниже и доступны для заказа через Сравни. Причем практически для каждого из них пользователям нашего финансового маркетплейса предоставляются скидки и другие бонусы от учебного центра.

Тестировщик на Python (SKILLFACTORY)

Длительность обучения: 9 месяцев.

Основные преимущества программы подготовки:

  1. Обучение с нуля, то есть без требований к начальной подготовке слушателей.
  2. Возможность трудоустройства уже через 4 месяца после старта подготовки.
  3. Скидки при оформлении заказов в компаниях-партнерах учебного центра Нетология (к числу которых относится Сравни).
  4. Оплата обучения в рассрочку без переплаты.
  5. Удачное сочетание теории с практическими занятиями.
  6. Отличные перспективы дальнейшего совершенствования уровня профессиональной подготовки в виде обучения на полноценного Python-разработчика (несколько подобных курсов доступны непосредственно в учебном центре).

Онлайн-курсы Python для начинающих (Международная Школа Профессий – МШП)

Длительность обучения: 2 месяца.

Основные преимущества программы подготовки:

  1. Обучение с нуля.
  2. Сжатые сроки и бюджетная стоимость подготовки.
  3. Изучение базового набора знаний и навыков, которого по минимуму хватает для быстрого старта профессиональной деятельности.
  4. Самостоятельная разработка трех проектов (каждый после защиты пополняет личное портфолио специалиста).
  5. Гибкий план проведения учебных занятий.
  6. Обратная связь с наставником.
  7. Эффективные коммуникации с другими участниками учебной группы.

Python-разработчик – расширенный курс (Нетология)

Длительность обучения: 12 месяцев.

Основные преимущества программы подготовки:

  1. Проработанная до мелочей программа обучения от одного из лидеров отечественного дистанционного профессионального образования.
  2. Возможность выхода на рынок труда уже через полгода начала учебы на курсе.
  3. Самостоятельное выполнение 22 проектов, самые удачные из которых можно добавить в портфолио.
  4. Консультации карьерного психолога и помощь в трудоустройстве.
  5. Направление на стажировке в процессе обучения (без отрыва от подготовки на курсе).
  6. Выдача официального диплома о профессиональной переподготовке установленного образца.

FAQ

Для чего используется округление при программировании на Python?

Действие осуществляется при проведении различных вычислений, где используются десятичные дроби, с целью сокращения или полного исключения цифр после запятой.

Какие способы округлить числа доступны разработчикам на Питоне?

Их несколько: встроенная опция round(), функция отбрасывания дробной части int(), дополнительные модули для языка программирования math и decimal.

Почему Пайтон входит в число самых распространенных языков программирования?

Из-за комплекса причин, включая: универсальность, легкость освоения, удобство использования, сочетаемость с другими языками и т.д.

Как освоить Python быстро, удобно и с минимальными затратами?

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

Вывод

  1. Необходимость округлить числа при программировании на Python возникает при проведении вычислений с десятичными дробями. Особенно – при накоплении большого количества знаков после запятой.
  2. Пайтон-разработчикам доступны несколько способов округления: удобный и универсальный метод round(), быстрый, но неточный оператор int(), точные и функциональные модули math и decimal.
  3. Выбор оптимального варианта зависит от задач, стоящих перед программистом, и уровня его профессиональных знаний.