你如何在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.floor
地math.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中的数字的语句中, True
和False
被解释为1
和0
。 g.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