Найти в Дзене
Каждодневье

Функции trunc, floor, ceil из модуля math. Округление в большую или меньшую сторону в Python

Программист работает с кодом, а результат этого кода в нормальном исходе должен отдавать верные данные. Но вот бывают случае, когда надо извернуться и дать выровненные данные в пользу заказчика. Зайдет в отдел уважаемый начальник начальников и попросит сделать цены такими, чтобы число 49.1 округлилось до 50. Дескать клиент не заметит, а нам в карман 99 копеек упадёт. Всё честно ребята между собой "поделим" :-) Или обратная ситуация, что число 49.99 надо округлить до 49 против всех канонов математики и приблизиться к разряду продавца с заявленными гарантированно-низкими ценами. Программист уныло посмотрит на ТЗ, скажет неправильно всё это, но доказывать начальнику начальников обратное не станет. Как это делается в Python? Если надо просто отсечь знаки после запятой (после точки у вещественного числа :-)), то мы можем воспользоваться приведением к целочисленному значению через штатный механизм приведения элементов int() и через функцию trunc из модуля math (надо импортировать, инач
Оглавление

Программист работает с кодом, а результат этого кода в нормальном исходе должен отдавать верные данные. Но вот бывают случае, когда надо извернуться и дать выровненные данные в пользу заказчика.

Зайдет в отдел уважаемый начальник начальников и попросит сделать цены такими, чтобы число 49.1 округлилось до 50. Дескать клиент не заметит, а нам в карман 99 копеек упадёт. Всё честно ребята между собой "поделим" :-)

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

Программист уныло посмотрит на ТЗ, скажет неправильно всё это, но доказывать начальнику начальников обратное не станет.

Как это делается в Python?

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

trunc от слова truncate - обрезать срезать отсекать

Для удобства я не стал рисовать два скрина, а просто показал на одном изображении, что вывод будет идентичен.

Отсечение всех знаков после запятой.
Отсечение всех знаков после запятой.

Приведение вещественного числа к целому в меньшую сторону (вниз)

Чтобу так сделать - потребуется функция floor(), входящая в пакет math. независимо от величины и количества знаков в дробной части округление до целого числа будет в меньшую сторону

Приведение вещественного числа к целому в большую сторону (вверх)

Тут поможет ceil() который также входит во встроенный модуль math() предлагающий обширный функционал для работы с числами. Результатом будет целое число, округленное в большую сторону независимо от размерности дробной части.

Покажу на примере:

Результат работы функций из модуля math
Результат работы функций из модуля math

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

Надеюсь в определенный момент изучения языка программирования этот пост вам пригодится.

Подписывайтесь, ставьте лайки. Я очень надеюсь на долгосрочное развитие этого канала. Мне важен любой комментарий, совет или наставление. Мира вам :-)