如何在Python中四舍五入一个数字向上?

我试过四舍五入,但它把数字四舍五入了。例子:

round(2.3) = 2.0 

而不是我想要的3。

我尝试了int(number + .5),但它再次四舍五入!例子:

int(2.3 + .5) = 2

当前回答

对于那些想四舍五入a / b并得到整数的人:

使用整数除法的另一种变体是

def int_ceil(a, b):
    return (a - 1) // b + 1

>>> int_ceil(19, 5)
4
>>> int_ceil(20, 5)
4
>>> int_ceil(21, 5)
5

注:a、b必须为非负整数

其他回答

你可能也喜欢numpy:

>>> import numpy as np
>>> np.ceil(2.3)
3.0

我并不是说numpy比数学更好,但如果您已经将numpy用于其他目的,则可以保持代码的一致性。

总之,这是我偶然发现的一个细节。我经常使用numpy,很惊讶没有人提到它,但当然,公认的答案是完全正确的。

对于那些不想使用import的人。

对于给定的列表或任何数字:

x = [2, 2.1, 2.5, 3, 3.1, 3.5, 2.499,2.4999999999, 3.4999999,3.99999999999]

你必须首先计算这个数字是否等于它的整数,这个整数总是四舍五入。如果结果为True,则返回数字,如果不是,则返回整数(数字)+ 1。

w = lambda x: x if x == int(x) else int(x)+1
[w(i) for i in z]
>>> [2, 3, 3, 3, 4, 4, 3, 3, 4, 4]

数学逻辑:

如果数字有小数部分:round_up - round_down == 1,总是。 如果数字没有小数部分:round_up - round_down == 0。

So:

Round_up == x + round_down

:

如果number != round_down, X == 1 如果number == round_down, X == 0

你把数字分成两部分,整数和小数。如果小数不为0,加1。

PS:我详细解释了这一点,因为上面的一些评论要求这样做,我仍然是新手,所以我不能评论。

对于那些想四舍五入a / b并得到整数的人:

使用整数除法的另一种变体是

def int_ceil(a, b):
    return (a - 1) // b + 1

>>> int_ceil(19, 5)
4
>>> int_ceil(20, 5)
4
>>> int_ceil(21, 5)
5

注:a、b必须为非负整数

如果处理整数,一种四舍五入的方法是利用//四舍五入的事实:只对负数进行除法,然后对结果求负数。不需要导入、浮点数或条件。

rounded_up = -(-numerator // denominator)

例如:

>>> print(-(-101 // 5))
21

试试这个:

a = 211.0
print(int(a) + ((int(a) - a) != 0))