如何在Python中四舍五入一个数字向上?
我试过四舍五入,但它把数字四舍五入了。例子:
round(2.3) = 2.0
而不是我想要的3。
我尝试了int(number + .5),但它再次四舍五入!例子:
int(2.3 + .5) = 2
如何在Python中四舍五入一个数字向上?
我试过四舍五入,但它把数字四舍五入了。例子:
round(2.3) = 2.0
而不是我想要的3。
我尝试了int(number + .5),但它再次四舍五入!例子:
int(2.3 + .5) = 2
当前回答
我知道这是很久以前的事了,但我找到了一个非常有趣的答案,所以是这样的:
-round(-x-0.5)
这修复了边缘情况,适用于正数和负数,并且不需要任何函数导入
干杯
其他回答
有趣的Python 2。要记住的X问题:
>>> import math
>>> math.ceil(4500/1000)
4.0
>>> math.ceil(4500/1000.0)
5.0
问题是,在python中,两个整型数的除法会产生另一个整型数,并且在ceiling调用之前被截断。您必须将一个值设置为浮点(或强制转换)以获得正确的结果。
在javascript中,完全相同的代码产生不同的结果:
console.log(Math.ceil(4500/1000));
5
四舍五入的值应该是浮动的
a = 8
b = 21
print math.ceil(a / b)
>>> 0
but
print math.ceil(float(a) / b)
>>> 1.0
我基本上是Python的初学者,但如果你只是想四舍五入而不是向下,为什么不这样做:
round(integer) + 1
我很惊讶我还没有看到这个答案(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:我详细解释了这一点,因为上面的一些评论要求这样做,我仍然是新手,所以我不能评论。