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

在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
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的,现在回答了,还在输入哈,希望你改变你对否决票的想法@在最后一个例子中,ritlew
math.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