Ответ 1
Пока ваши числа положительны, вы можете просто преобразовать в int
округлить до следующего целого числа:
>>> int(3.1415)
3
Для отрицательных целых чисел это будет округлено.
Я нашел два способа взять полы в Python:
3.1415 // 1
и
import math
math.floor(3.1415)
Проблема с первым подходом заключается в том, что он возвращает float (а именно 3.0
). Второй подход кажется неуклюжим и слишком длинным.
Существуют ли альтернативные решения для приема этажей в Python?
Пока ваши числа положительны, вы можете просто преобразовать в int
округлить до следующего целого числа:
>>> int(3.1415)
3
Для отрицательных целых чисел это будет округлено.
Вы можете вызвать int() на float, чтобы применить к нижнему int (не обязательно пол, но более элегантный)
int(3.745) #3
Альтернативно вызывать int на основании результата.
from math import floor
f1 = 3.1415
f2 = 3.7415
print floor(f1) # 3.0
print int(floor(f1)) # 3
print int(f1) # 3
print int(f2) # 3 (some people may expect 4 here)
print int(floor(f2)) # 3
Второй подход - путь, но есть способ сократить его.
from math import floor
floor(3.1415)
Передайте его int
, если вы не хотите, чтобы float
int(3.1415 // 1)
Остерегайтесь того, что использование пола и литье в int - это не то же самое с отрицательными числами. Если вы действительно хотите, чтобы пол был целым числом, вы должны указать на int после вызова math.floor().
>>> int(-0.5)
0
>>> math.floor(-0.5)
-1.0
>>> int(math.floor(-0.5))
-1
from math import floor
def ff(num, step=0):
if not step:
return floor(num)
if step < 0:
mplr = 10 ** (step * -1)
return floor(num / mplr) * mplr
ncnt = step
if 1 > step > 0:
ndec, ncnt = .0101, 1
while ndec > step:
ndec *= .1
ncnt += 1
mplr = 10 ** ncnt
return round(floor(num * mplr) / mplr, ncnt)
Вы можете использовать положительные/отрицательные числа и числа с плавающей точкой .1,.01,.001...