当我注意到奇怪的事情时,我只是编写了一些东西:
2/3
返回0,这是合乎逻辑的,因为它是0.6666666666666666,它被舍入为0,因为它是一个int。
int(2/3.0)
返回相同内容,因为int(0.6666666666666666)
返回0.
现在:
-2/3.0
返回-0.6666666666666666,这是合乎逻辑的,但这里出现让我困惑的部分,
int(-0.6666666666666666)
返回0(因为整数为0)
但-2/3
返回-1 ...
这是为什么?
这不也应该返回0?
在所有int(-0.6666666666666666)
返回0后,为什么-2/3
返回-1?
TL; DR:2/3 == 0
,但是-2/3 != 0
?
最好的问候,Sjaak。
答案 0 :(得分:7)
/
楼层,它不会被截断。它与应用于浮点除法的int()
操作不同。来自Binary arithmetic operations documentation:
结果是数学除法,其中'floor'函数应用于结果。
如果 x 是浮点数,则转换将截断为零。
地板总是向下舍入,因此对于从0开始的负数。
应该注意-
unary operator的operator precedence比/
除法运算符高transform
,因此表达式被解析为(-2)/3
,而不是-(2/3)