/
Вопросы и ответы
/
Python
/

Какая функция нужна для округления в большую сторону в Python?

Какая функция нужна для округления в большую сторону в Python?

4 года назад

Andrey Moshkov

Ответы

0

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

1
2
3
4
5
6
7
import math

print(math.ceil(1.4)) # => 2
print(math.ceil(5.3)) # => 6 
print(math.ceil(-5.3)) # => -5
print(math.ceil(22.12549)) # => 23
print(math.ceil(10.0)) # => 10

4 года назад

Владимир Устянивский

0

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

1
2
3
4
5
import math

print(math.ceil(2.1))   # => 3
print(math.ceil(5))     # => 5
print(math.ceil(-2.1))  # => -2

Результат — целое число типа int. Для отрицательных чисел «в большую сторону» означает ближе к нулю: −2 больше, чем −2.1.

Функции округления

ФункцияЧто делает2.12.5−2.1
math.ceil(x)вверх33−2
math.floor(x)вниз22−3
math.trunc(x)отбрасывает дробную часть22−2
round(x)к ближайшему22−2

round(2.5) возвращает 2: при ровно половине Python округляет к ближайшему чётному числу. round(3.5) вернёт 4.

Округлить вверх без math

Целочисленное деление с округлением вверх часто пишут так:

1
2
3
pile, middle = 7, 3
hours = (pile + middle - 1) // middle
print(hours)  # => 3

Формула (a + b - 1) // b даёт a / b, округлённое вверх, для положительных целых чисел. Работает быстро и без погрешности float. Другая запись того же: -(-a // b).

Округлить вверх до двух знаков

math.ceil округляет только до целого. Для знаков после запятой умножают и делят:

1
2
3
4
import math

price = 2.123
print(math.ceil(price * 100) / 100)  # => 2.13

У этого способа есть ловушка: дробные числа хранятся неточно.

1
2
print(1.1 * 100)                     # => 110.00000000000001
print(math.ceil(1.1 * 100) / 100)    # => 1.11 — лишняя копейка

Для денег используйте Decimal:

1
2
3
4
from decimal import Decimal, ROUND_CEILING

price = Decimal("1.1")
print(price.quantize(Decimal("0.01"), rounding=ROUND_CEILING))  # => 1.10

Число передают в Decimal строкой: Decimal("1.1"), иначе погрешность float попадёт внутрь.

Массив чисел

1
2
3
import numpy as np

print(np.ceil([1.2, 2.5, -1.7]))  # => [ 2.  3. -1.]

Числа, деление и модуль math разбирают в бесплатном курсе «Основы Python».

18 дней назад

Никита Вихров

+7 800 100 22 47

бесплатно по РФ

+7 495 085 21 62

бесплатно по Москве

108813 г. Москва, вн.тер.г. поселение Московский,
г. Московский, ул. Солнечная, д. 3А, стр. 1, помещ. 20Б/3
ОГРН 1217300010476
ИНН 7325174845