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

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

round(2.3) = 2.0 

而不是我想要的3。

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

int(2.3 + .5) = 2

当前回答

有趣的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

其他回答

毫无意义地做:

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

我知道这是很久以前的事了,但我找到了一个非常有趣的答案,所以是这样的:

-round(-x-0.5)

这修复了边缘情况,适用于正数和负数,并且不需要任何函数导入

干杯

没有导入math //使用基本环境:

A)方法/类方法

def ceil(fl): 
  return int(fl) + (1 if fl-int(fl) else 0)

def ceil(self, fl): 
  return int(fl) + (1 if fl-int(fl) else 0)

b)λ:

ceil = lambda fl:int(fl)+(1 if fl-int(fl) else 0)

上面的答案是正确的,但是,仅仅为这个函数导入数学模块对我来说通常感觉有点过分。幸运的是,还有另一种方法:

g = 7/5
g = int(g) + (not g.is_integer())

在python中涉及数字的语句中,True和False被解释为1和0。g.s is_integer()基本上转换为g.s has_no_decimal()或g == int(g)。所以英语的最后一个表述是把g四舍五入,如果g有小数,就加1。

我认为你混淆了int()和round()之间的工作机制。

如果给定的是浮点数,Int()总是截断小数;而round(),在2.5的情况下,2和3都在距离2.5相等的距离内,Python返回距离0点更远的值。

round(2.5) = 3
int(2.5) = 2