Python 奇数取整问题

Python 奇数取整问题,python,python-2.7,floating-point,int,rounding,Python,Python 2.7,Floating Point,Int,Rounding,我正在编写代码,突然发现了一些奇怪的东西: 2/3返回0,这是合乎逻辑的,因为这是0.6666,因为它是一个整数,所以向0取整。 int(2/3.0)返回相同的值,因为int(0.6666)返回0 现在: -2/3.0返回-0.666666,这是合乎逻辑的,但让我困惑的部分来了, int(-0.666666)返回0(因为int向0取整)。 但是-2/3返回-1… 这是为什么? 这不也应该返回0吗? 毕竟int(-0.666666)返回0,那么为什么-2/3返回-1呢 TL;DR:2/3==0,

我正在编写代码,突然发现了一些奇怪的东西:
2/3
返回0,这是合乎逻辑的,因为这是0.6666,因为它是一个整数,所以向0取整。
int(2/3.0)
返回相同的值,因为
int(0.6666)
返回0

现在:
-2/3.0
返回-0.666666,这是合乎逻辑的,但让我困惑的部分来了,
int(-0.666666)
返回0(因为int向0取整)。
但是
-2/3
返回-1…
这是为什么?
这不也应该返回0吗?
毕竟
int(-0.666666)
返回0,那么为什么
-2/3
返回-1呢


TL;DR:
2/3==0
,但
-2/3!=0


向您致意,Sjaak.

/
楼层,它不会截断。它与应用于浮点除法的
int()
操作不同。从:

结果是应用“地板”函数对结果进行数学除法

:

如果x是浮点,则转换将向零截断

地板总是向下舍入,所以负数从0开始舍入


应该注意的是,的除法运算符高于
/
除法运算符,因此表达式被解析为
(-2)/3
,而不是许多其他语言中的
-(2/3)

/
将截断(即向零舍入),然后
(-2)/3=-(2/3)==-0==0
@JeppeStigNielsen:这是每种语言的选择。Python和Ruby,而Java、C、C#和FORTRAN则截短。我已经清理了关于复制的原因的评论;我很高兴在Meta或聊天中谈论这些事情。既然你提到了,你不应该0.666666。。。如果这只是进行正常的舍入,则舍入为1(而不是0)?真正的副本似乎是