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)?真正的副本似乎是