Подтвердить что ты не робот

Принимая слово плавания

Я нашел два способа взять полы в Python:

3.1415 // 1

и

import math
math.floor(3.1415)

Проблема с первым подходом заключается в том, что он возвращает float (а именно 3.0). Второй подход кажется неуклюжим и слишком длинным.

Существуют ли альтернативные решения для приема этажей в Python?

4b9b3361

Ответ 1

Пока ваши числа положительны, вы можете просто преобразовать в int округлить до следующего целого числа:

>>> int(3.1415)
3

Для отрицательных целых чисел это будет округлено.

Ответ 2

Вы можете вызвать 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

http://docs.python.org/library/functions.html#int

Ответ 3

Второй подход - путь, но есть способ сократить его.

from math import floor
floor(3.1415)

Ответ 4

Передайте его int, если вы не хотите, чтобы float

int(3.1415 // 1)

Ответ 5

Остерегайтесь того, что использование пола и литье в int - это не то же самое с отрицательными числами. Если вы действительно хотите, чтобы пол был целым числом, вы должны указать на int после вызова math.floor().

>>> int(-0.5)
0
>>> math.floor(-0.5)
-1.0
>>> int(math.floor(-0.5))
-1

Ответ 6

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...