你如何在Python中整理一个数字?

这个问题正在杀死我。 如何在Python中汇总一个数字?

我试了一下(数字),但是却把数字放下了。 例:

round(2.3) = 2.0 and not 3, what I would like 

我尝试了int(数字+5),但是它再次围绕数字! 例:

 int(2.3 + .5) = 2 

然后我试了一下(数字+5),但在边缘情况下不能使用。 例:

 WAIT! THIS WORKED! 

请指教。

细胞 (天花板)function:

 import math print math.ceil(4.2) 

有趣的Python 2.x的问题要记住:

 >>> import math >>> math.ceil(4500/1000) 4.0 >>> math.ceil(4500/1000.0) 5.0 

问题是在python中划分两个整数会产生另一个int,并且在最高限额调用之前舍入。 你必须使一个值浮动(或强制)才能得到正确的结果。

在JavaScript中,完全相同的代码会产生不同的结果:

 console.log(Math.ceil(4500/1000)); 5 

我知道这个答案是一段时间以前的问题,但是如果你不想inputmath,你只是想整理一下,这对我很有帮助。

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

第一部分变为4,第二部分如果存在剩余部分,则评估为“真”,其中除了真= 1; False = 0.所以如果没有余数,那么它保持相同的整数,但是如果有余数则加1。

你可能也喜欢numpy:

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

我并不是说它比math好,但是如果你已经使用numpy作其他用途,你可以保持你的代码一致。

无论如何,只是我遇到的细节。 我使用numpy了很多,很惊讶它没有得到提及,但当然接受的答案完美的工作。

如果用整数进行操作,其中一种方法就是利用//舍入的事实:只要对负数进行除法,然后否定答案。 不需要导入,浮点或条件。

 rounded_up = -(-numerator // denominator) 

例如:

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

使用math.ceil整理:

 >>> import math >>> math.ceil(5.4) 6.0 

注意 :input应该是浮动的。

如果你需要一个整数,调用int来转换它:

 >>> int(math.ceil(5.4)) 6 

顺便说一下 ,使用math.floormath.floor圆整到最近的整数。

 >>> math.floor(4.4), math.floor(4.5), math.floor(5.4), math.floor(5.5) (4.0, 4.0, 5.0, 5.0) >>> round(4.4), round(4.5), round(5.4), round(5.5) (4.0, 5.0, 5.0, 6.0) >>> math.ceil(4.4), math.ceil(4.5), math.ceil(5.4), math.ceil(5.5) (5.0, 5.0, 6.0, 6.0) 

语法可能不像人们喜欢的pythonic,但它是一个强大的库。

https://docs.python.org/2/library/decimal.html

 from decimal import * print(int(Decimal(2.3).quantize(Decimal('1.'), rounding=ROUND_UP))) 

要确保四舍五入的价值应该是浮动的

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

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

我很惊讶没有人build议

 (numerator + denominator - 1) // denominator 

整数除法与四舍五入。 曾经是C / C ++ / CUDA的常用方式(参见divup

我很惊讶,我还没有看到这个答案round(x + 0.4999) ,所以我要放下。 请注意,这适用于任何Python版本。 对Python舍入scheme所做的更改使事情变得困难。 看到这个职位 。

没有导入,我使用:

 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()的内置types,将值四舍五入为功率减n的10的最接近倍数; 如果两个倍数相等,则舍入为偶数select

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

上面的答案是正确的,但是,为这个函数导入math模块通常对我来说有点矫枉过正。 幸运的是,还有另一种方法可以做到这一点:

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

在涉及python中的数字的语句中, TrueFalse被解释为10g.is_interger()基本上转换为g.has_no_decimal()g == int(g) 。 所以,最后一个英语句子读取round g down and add one if g has decimal

当你在python中操作4500/1000时,结果为4,因为对于默认的python asume为整数的结果,逻辑上:4500/1000 = 4.5 – > int(4.5)= 4,4的ceil显然是4

使用4500 / 1000.0的结果将是4.5和4.5 – > 5的细胞

使用javascript,你将会得到4.5 / 4500的结果,因为javascript仅仅将结果作为“数字types”并且直接返回结果作为float

祝你好运!!

要做到这一点,没有任何import:

 >>> 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) 

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

干杯

你可以使用floor devision并添加1。 2.3 // 2 + 1

如果你不想导入任何东西,你可以随时编写自己的简单函数:

def RoundUP(num): if num== int(num): return num return int(num + 1)

我基本上是一个Python的初学者,但如果你只是想要收集而不是为什么不做:

 round(integer) + 1