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

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

Встроенные функции

Для операции округления в Python есть встроенные функции – round() и int()

round

round(number[, ndigits]) – округляет число (number) до ndigits знаков после запятой. Это стандартная функция, которая для выполнения не требует подключения модуля math.

По умолчанию операция проводится до нуля знаков – до ближайшего целого числа. Например:

round(3.5) > 4 round(3.75, 1) > 3.8

Чтобы получить целый показатель, результат преобразовывают в int.

Синтаксически функция вызывается двумя способами.

  1. round(x) – это округление числа до целого, которое расположено ближе всего. Если дробная часть равна 0,5, то округляют до ближайшего четного значения.
  2. round(x, n) – данные х округляют до n знаков после точки. Если округление проходит до сотых, то n равен "2", если до тысячных – "3" и т.д.

int

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

int(5.9) > 5 int(-5.77) > -5

Для положительных чисел функция int аналогична функции math.floor(), а для отрицательных – аналогично math.ceil(). Например:

import math math.floor(3.999) > 3 math.ceil(3.999) > 4

💡 Чтобы число по int преобразовать по математическим правилам, нужно выполнить следующие действия.

  1. Если число положительное, добавить к нему 0,5.
  2. Если число отрицательное, добавить -0,5.

Синтаксически преобразование оформляется так:

num = 5.77 int(num + (0.5 if num > 0 else -0.5)) > 6

Функции из библиотеки Math

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

import math

math.ceil

Функция получила название от английского слова "ceiling" – "потолок"

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

Любая дробь находится между двумя целыми числами. Например, 2.3 лежит между 2 и 3. Функция ceil() определяет большую сторону и возводит к нему результат преобразования. Например:

import math math.ceil(3.25) > 4

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

import math math.ceil(-3.25) > -3

math.floor

Функция получила название от английского слова "floor" – "пол"

math.floor() действует противоположно math.ceil() – округляет дробное значение до ближайшего целого, которое меньше или равно исходному. Округление происходит в меньшую сторону (вниз):

import math math.floor(3.9) > 3 math.floor(-2.1) > -3

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

math.trunc

Функция получила название от английского слова "truncate" – "урезать"

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

import math math.trunc(7.11) > 7 math.trunc(-2.1) -2

💡 Избавиться от дроби можно без подключения модуля. Для этого есть стандартная функция int Она преобразовывает дробные числа в целые путем игнорирования дроби.

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

В Python 2 и Python 3 реализованы разные принципы округления.

В Python 2 используется арифметическое округление. В нем наблюдается большое количество погрешностей, что приводит к неточностям в процессе вычислений.

Во втором Python есть только 4 цифры, которые ведут к преобразованию к меньшему значению – 1, 2, 3 и 4. Также 5 цифр, которые приводят к большему значению – 5, 6, 7, 8, 9. Такое неравное распределение ведет к тому, что погрешность постоянно нарастает.

Python 2 по правилам арифметического округления преобразует число 5,685 в 5,68 до второго знака. Такая погрешность связана с тем, что десятичные цифры float в двоичном коде невозможно корректно представить.

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

2,5 по правилам банковского преобразования будет равно 2, а 3,5 = 4 (значения возводятся к близкому четному). Минимизировать погрешности можно благодаря практически равной вероятности, что перед пятеркой будет четное или нечетное число.

😭
😕
😃
😍