Python除法运算符给出不同的结果
在Python中,我试图将一个整数除以一半,我遇到了两个基于数字符号的不同结果 例如:Python除法运算符给出不同的结果,python,integer-division,floor,ceil,Python,Integer Division,Floor,Ceil,在Python中,我试图将一个整数除以一半,我遇到了两个基于数字符号的不同结果 例如: 5/2 gives 2 and -5/2 gives -3 当我除以-5/2时,如何得到-2 这是由于python四舍五入整数除法造成的。下面是一些例子。在python中,float类型是更强的类型,涉及float和int的表达式计算为float >>> import math >>> math.ceil(float(-5)/2) -2.0 >>>
5/2 gives 2
and
-5/2 gives -3
当我除以-5/2时,如何得到-2 这是由于python四舍五入整数除法造成的。下面是一些例子。在python中,
float
类型是更强的类型,涉及float
和int
的表达式计算为float
>>> import math
>>> math.ceil(float(-5)/2)
-2.0
>>> 5/2
2
>>> -5/2
-3
>>> -5.0/2
-2.5
>>> 5.0/2
2.5
>>> -5//2
-3
为了避免舍入,您可以利用此属性;而是使用float
执行计算,以避免失去精度。然后使用返回该数字的上限(然后再次转换为->int):
您应该在下面的表达式中包含除法
print -(5/2)
您需要使用浮点除法,然后使用
int
截断小数
>>> from __future__ import division
>>> -5 / 2
-2.5
>>> int(-5 / 2)
-2
在Python3中,浮点除法是默认的,您不需要包含来自未来导入除法的。或者,您可以手动将其中一个值设为浮点,以强制进行浮点除法
>>> -5 / 2.0
-2.5
截至:
你可能会发现这是更好的方法。看Guido的解释,这是意外的还是有问题的?Python这样做是因为-5%2
给出1
比-1
更有用,-5/2==-3
与-5%2==1
比-5/2=-2
更一致。如果您需要输出与其他语言对操作的解释保持一致,-5/2==-3
可能是个问题,但除此之外,它通常非常好。math.ceil
总是向上取整,而不是向零取整。可能不是OP想要的5/2
我不知道OP想要什么,我只是向他展示了当我除以-5/2时他是如何得到-2的,现在回答了,还在输入哈,希望你改变你对否决票的想法@在最后一个例子中,ritlewmath.ceil
似乎是多余的。正如我在回答中提到的,使用浮点除法并随后转换为int就足够了。在这种情况下使用ceil
有什么好处?如果出于任何原因,您不想从\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
导入除法,您可以这样做:int(float(-5)/2)
如果您将其用于大整数,则会受到精度的影响,如果您使用的整数大于10^18
@BrendanAbel:它的启动时间比这个稍早一点。此外,您的输出似乎缺少负号。这只适用于在整数除法之后应用负一元运算符。当5
或2
是变量时,它不能作为通用解决方案。
>>> -5 / 2.0
-2.5
> int(float(-5)/2)
-2
> int(float(5)/2)
2