Объясните, как работает это округление числа в большую сторону?

Мне по заданию надо было округлить число в большую сторону, при это не использовав условный оператор и сторонние библиотеки.

Не сумев разобраться самостоятельно, я полез в google и нашёл такое решение. Однако проблема в том, что я не понимаю, как это работает.

int(-1 * n // 1 * -1)

Ответы (3 шт):

Автор решения: S. Nick
>>> n = 5.3
>>> 
>>> step1 = -1 * n
>>> step1
-5.3
>>> step2 = step1 // 1
>>> step2
-6.0
>>> step3 = step2 * -1
>>> step3
6.0
>>> step4 = int(step3)
>>> step4
6
>>> 
→ Ссылка
Автор решения: enkryptor
int(-1 * n // 1 * -1)

// — это оператор целочисленного деления в Python. По приоритету он такой же, как умножение, поэтому выполнение происходит слево-направо:

  1. Сначала число умножается на -1 (минус один), то есть просто меняется знак числа
  2. Затем полученный результат делится на единицу. Это целочисленное деление с округлением вниз, но поскольку мы поменяли знак, то округлять начинает вверх
  3. Наконец мы опять умножаем всё на -1, чтобы вернуть знак как было
→ Ссылка
Автор решения: zaborschicov

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

o = 1 - int(1 - n % 1) # выясняем, есть ли остаток, ниже будет объяснено подробно
a = n//1 + o # складываем целую часть и остаток, округлённый вверх

А теперь подробнее про остаток. Мы отнимает от единицы не целую часть числа, и python автоматически округляет в меньшую сторону. Тем самым, когда остатка нет функция возвращает 1, а когда есть – 0. После этого мы просто переворачиваем результат с помощью операции вычитания.

Надеюсь, информация была полезна. Удачи в изучение Python!

→ Ссылка