Взять пол поплавка - PullRequest
       35

Взять пол поплавка

37 голосов
/ 23 февраля 2012

Я нашел два способа получения этажей в Python:

3.1415 // 1

и

import math
math.floor(3.1415)

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

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

Ответы [ 6 ]

59 голосов
/ 23 февраля 2012

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

>>> int(3.1415)
3

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

13 голосов
/ 23 февраля 2012

Вы можете вызвать int () в плавающей точке, чтобы привести к более низкому целому (не очевидно, этаж, но более элегантно).

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

6 голосов
/ 23 февраля 2012

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

from math import floor
floor(3.1415)
4 голосов
/ 23 февраля 2012

Приведите его к int, если вы не хотите float

int(3.1415 // 1)
3 голосов
/ 29 мая 2013

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

>>> int(-0.5)
0
>>> math.floor(-0.5)
-1.0
>>> int(math.floor(-0.5))
-1
0 голосов
/ 30 июня 2019
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 ...

...