Введение в тему
Зачастую при вычислениях, а их в работе программиста не мало, мы сталкиваемся с задачами округления. Округлять можно по разному: вверх, вниз и с разной степенью точности. В языке Пайтон для выполнения этого класса задач предусмотрено несколько доступных инструментов: функции round(), int(), а так же модуль math. Но, есть и подводные камни. Обо всём этом Вы узнаете из данного урока.
Встроенные функции
Начнём с рассмотрения встроенных функций: round и int. Что означает «встроенные»? Всё просто: чтобы их использовать не надо ничего подключать или импортировать – просто пишете имя функции и она уже готова к бою.
Round
Функция round – округляет число до необходимой точности (заданного количества знаков после запятой).
Точность является не обязательным параметром и, если её не задать, то Python округлит число, указанное в скобках, до ближайшего целого числа:
результат_округления = round(3.14)
print(результат_округления)
# Вывод:
3
результат_округления = round(3.94)
print(результат_округления)
# Вывод:
4
import math
результат_округления = round(math.pi, 5)
print(результат_округления)
# Вывод:
3.14159
Тут есть одна особенность, о которой нужно знать, и о которой часто забывают.
Со школы многие привыкли, что, когда (N + 1) знак = 5, а последующие знаки равны нулю, округление производится всегда в большую по модулю сторону.
Если дробная часть равна 0,5, то результатом округления будет ближайшее четное число.
При округлении функцией round(), можно получить следующее:
round(2.65, 1)
# Вывод:
2.6
round(2.85, 1)
# Вывод:
2.9
Почему в одном случае округляется вниз, а в другом вверх? При переводе 2.85 в двоичную систему получается число, которое немного больше. Поэтому функция и округляет вверх.
Int
Функция int, в целом, ведёт себя как round без заданной точности – округляет до целого, но есть и различия. Разница в том, что round выполняет округление до ближайшего целого числа, а int – в сторону нуля.
результат_округления = int(3.94)
print(результат_округления)
# Вывод:
3
Функции из библиотеки math
Библиотека math является частью стандартной библиотеки, то есть встроена в Питон по умолчанию. Она предоставляет широкий функционал для различных математических операций. В том числе, есть инструменты и для округления. Для начала работы, этот модуль необходимо импортировать в Ваш код:
import math
Math ceil
Название этой функции является сокращением английского слова «ceiling», что переводится как «потолок».
Даная функция округляет число в большую сторону:
import math
результат_округления = math.ceil(3.14)
print(результат_округления)
# Вывод:
4
Math floor
Функция floor является, в каком-то смысле, противоположностью предыдущей, ведь она округляет вниз:
import math
результат_округления = math.floor(3.14)
print(результат_округления)
# Вывод:
3
Math trunc
Эта функция просто отбрасывает дробную часть:
import math
результат_округления = math.trunc(3.14)
print(результат_округления)
# Вывод:
3
Функция trunc идентична функции int. Так же стоит отметить что для положительных чисел функция int аналогична функции math.floor(), а для отрицательных – аналогично math.ceil().
Различие округления в python 2 и python 3
Во втором Пайтоне и в третьем округление построено на принципиально различных алгоритмах.
В Python 2 используется округление, построенное на законах математики. Его ещё называют арифметическим. Это приводит к большому числу неточностей, поскольку невозможно представить десятичные числа в двоичном формате с абсолютной точностью.
В Python 3 используется, так называемое, банковское округление. В результате язык округляет к ближайшему четному. Этот алгоритм тоже не является абсолютно точным, но, всё же, более совершенный.