奇怪的四舍五入问题

时间:2018-02-18 16:07:03

标签: python python-2.7 floating-point int rounding

当我注意到奇怪的事情时,我只是编写了一些东西:
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。

1 个答案:

答案 0 :(得分:7)

/ 楼层,它不会被截断。它与应用于浮点除法的int()操作不同。来自Binary arithmetic operations documentation

  

结果是数学除法,其中'floor'函数应用于结果。

int() truncates

  

如果 x 是浮点数,则转换将截断为零。

地板总是向下舍入,因此对于从0开始的负数。

应该注意- unary operatoroperator precedence/除法运算符高transform,因此表达式被解析为(-2)/3,而不是-(2/3)