在没有math.ceil()的情况下向上舍入数学计算?

时间:2019-07-19 15:54:24

标签: python math missing-features

我正在一个没有math模块可用的系统上工作。安装的所有“数学”功能(math.ceil()math.round()等都会产生错误)。

我什至尝试使用import math产生以下结果:

<type 'ImportError'>
__import__ not found

困扰我的当前问题是:如何在没有math.ceil的情况下将数学计算取整为整数?

5 个答案:

答案 0 :(得分:1)

如果x是一个要舍入为整数的浮点数,并且想要一个整数类型的结果,则可以使用

rounded_up_x = int(-(-x // 1))

之所以起作用,是因为整数除以1会四舍五入,但是在进行除法之前和之后使用负号会舍入相反的方向。这里的int将浮点结果转换为整数。如果您想要一个等于整数的浮点值,请删除该int,这是某些编程语言所要做的。

@ D.LaRocque的提示,指出Python的ceil()函数返回整数类型。

答案 1 :(得分:1)

x的上限是大于或等于x的最小整数。因此,如果x的小数部分不为零,则只需加1。

一种简单的方法是:

def myCeil(x):
    return int(x) + int((x>0) and (x - int(x)) > 0)

示例:

print([myCeil(i) for i in [myCeil(i) for i in [-2, -1.1, -0.0, 0, 1, 1.2, 3]])
#[-2, -1, 0, 0, 1, 2, 3]

答案 2 :(得分:1)

这是一种方法。我认为这应该适用于大多数python版本。

def ceil(n):
    q, r = divmod(n, 1)
    return int(q) + bool(r)

答案 3 :(得分:-1)

这可以通过以下代码简单地完成(这就是我总是这样做的方式)。无需数学库

y = x如果x == x // 1否则取整(x + 0.5)

答案 4 :(得分:-4)

欢迎使用堆栈。

就我在代码中实现的而言,您无需import math即可使用round()

因为round()是python中的独立函数,而不是数学包的扩展。

所以,我建议您继续使用round()而不是math.round(),这样就可以了。

请参阅此doc,以了解有关如何使用round()函数的更多信息。