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

Rounding a math calculation up, without math.ceil()?

我正在开发一个没有可用 math 模块的系统。安装的所有 "Math" 功能(math.ceil()math.round() 等都会产生错误)。

我什至尝试使用 import math 结果:

<type 'ImportError'>
__import__ not found

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

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

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

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

Hat-tip @D.LaRocque 指出 Python 的 ceil() 函数 returns 是整数类型。

欢迎来到 Stack。

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

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

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

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

x的上限是大于等于x的最小整数。所以如果 x 的小数部分是 non-zero.

就加 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]

可以通过下面的代码简单地完成(我总是这样做)。不需要数学库

y = x if x==x//1 else round(x+0.5)

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

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