在浮动的地板

时间:2012-02-22 23:36:29

标签: python python-3.x math floor

我在Python中找到了两种获取底线的方法:

3.1415 // 1

import math
math.floor(3.1415)

第一种方法的问题是它返回一个浮点(即3.0)。第二种方法感觉笨拙且太长。

是否有替代解决方案用于在Python中获取地板?

6 个答案:

答案 0 :(得分:57)

只要您的数字是正数,您只需转换为int即可向下舍入到下一个整数:

>>> int(3.1415)
3

对于负整数,这将会四舍五入。

答案 1 :(得分:13)

你可以在float上调用int()来强制转换为较低的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

答案 2 :(得分:6)

第二种方法是要走的路,但有一种方法可以缩短它。

from math import floor
floor(3.1415)

答案 3 :(得分:3)

如果您不想要int

,请将其投放到float
int(3.1415 // 1)

答案 4 :(得分:3)

请注意,采取底线并投射到int与负数不同。如果你真的想要地板作为整数,你应该在调用math.floor()后转换为int。

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

答案 5 :(得分:0)

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