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

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

round(2.3) = 2.0 

而不是我想要的3。

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

int(2.3 + .5) = 2

当前回答

毫无意义地做:

>>> round_up = lambda num: int(num + 1) if int(num) != num else int(num)
>>> round_up(2.0)
2
>>> round_up(2.1)
3

其他回答

四舍五入的值应该是浮动的

a = 8 
b = 21
print math.ceil(a / b)
>>> 0

but

print math.ceil(float(a) / b)
>>> 1.0

对于那些想四舍五入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必须为非负整数

我很惊讶我还没有看到这个答案(x + 0.4999),所以我要把它写下来。注意,这适用于任何Python版本。对Python舍入方案的更改使事情变得困难。请看这篇文章。

无需导入,我使用:

def roundUp(num):
    return round(num + 0.49)

testCases = list(x*0.1 for x in range(0, 50))

print(testCases)
for test in testCases:
    print("{:5.2f}  -> {:5.2f}".format(test, roundUp(test)))

为什么会这样

来自文档

对于支持round()的内置类型,值四舍五入为10的- n次方的最接近倍数;如果两个倍数相等,则舍入到偶数

因此,2.5四舍五入为2,3.5四舍五入为4。如果不是这样的话,那么四舍五入可以通过加0.5来完成,但我们要避免达到中间点。所以,如果你加上0.4999,你会很接近,但有足够的余量来四舍五入到你通常期望的值。当然,如果x + 0.4999等于[n],这将失败。5000,但这不太可能。

对于那些不想使用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:我详细解释了这一点,因为上面的一些评论要求这样做,我仍然是新手,所以我不能评论。

我知道这个答案是以前的一个问题,但如果你不想输入数学,你只想四舍五入,这对我来说很有用。

>>> int(21 / 5)
4
>>> int(21 / 5) + (21 % 5 > 0)
5

第一部分变成4,如果有余数,第二部分计算为“True”,加上True = 1;False = 0。如果没有余数,它还是原来的整数,但如果有余数,它就加1。