整数除法到下一个整数

Integer division to next integer

如您所知,如果您这样做:

>>> 11/2
# 5

>>> 11/2.0
# 5.5

在这种情况下我想得到 6 个。我试过:

>>> 11//2
# 5

>>> 11//2.0
# 5.0

最后一个给出上一个整数。我想得到下一个整数。 即使是结果也像 x.1 我想得到 (x+1).

我该怎么做?

使用math.ceil

>>> import math
>>> math.ceil(11/2.0)
6.0
>>>
rounded_up = x // y + bool(x % y)

如果除法产生非零余数,我们加 1。这样做的好处是不会引入浮点不精确,因此在 math.ceil 产生错误答案的极端情况下它是正确的。


我们也可以用floor除法和两个取反进行运算:

rounded_up = -(-x // y)

-x/y的下限是x/y的上限的负数,所以再次取反产生x/y的上限。同样,我们通过在整数算术中执行所有操作来避免浮点舍入错误。

通常比同时进行模数和除法工作更有效,转换地板除法很容易:

x // y

分为 ceil 除法(与使用 math.ceil 不同,它不会因为大值的浮点不精确而导致得到不正确结果的风险):

(x + y - 1) // y

如果 x 可以被 y 整除,那么添加 y - 1 没有任何改变;楼层划分使最终结果不变。如果它不能被整除,这会将它增加到下一个倍数之上,让你只用一次除法运算而不是两次除法(除法很昂贵;做两次是双倍的昂贵),并且没有浮点精度问题。