Объясните, как работает это округление числа в большую сторону?
Мне по заданию надо было округлить число в большую сторону, при это не использовав условный оператор и сторонние библиотеки.
Не сумев разобраться самостоятельно, я полез в google и нашёл такое решение. Однако проблема в том, что я не понимаю, как это работает.
int(-1 * n // 1 * -1)
Ответы (3 шт):
>>> 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
>>>
int(-1 * n // 1 * -1)
// — это оператор целочисленного деления в Python. По приоритету он такой же, как умножение, поэтому выполнение происходит слево-направо:
- Сначала число умножается на -1 (минус один), то есть просто меняется знак числа
- Затем полученный результат делится на единицу. Это целочисленное деление с округлением вниз, но поскольку мы поменяли знак, то округлять начинает вверх
- Наконец мы опять умножаем всё на -1, чтобы вернуть знак как было
Объяснения выше уже есть, так что считаю рационально рассказать вам о более лёгком методе округления, который легче понять.
o = 1 - int(1 - n % 1) # выясняем, есть ли остаток, ниже будет объяснено подробно
a = n//1 + o # складываем целую часть и остаток, округлённый вверх
А теперь подробнее про остаток. Мы отнимает от единицы не целую часть числа, и python автоматически округляет в меньшую сторону. Тем самым, когда остатка нет функция возвращает 1, а когда есть – 0. После этого мы просто переворачиваем результат с помощью операции вычитания.
Надеюсь, информация была полезна. Удачи в изучение Python!