2016-11-04 103 views
1

任何人都可以解释为什么会发生以下情况吗?为什么打印-0.0?

print(-1 * (605 % 11))  #-> 0 
print(-1 * (0.5*1210 % 11)) #-> -0.0 
print(-1 * (0.5*1210) % 11) #-> 0.0 

尤其是-0.0是莫名其妙..

+5

为什么不能打印-0.0?这就是当你乘以-1时得到的结果。 – Kevin

+1

步骤操作顺序,操作符优先级等 – davedwards

+0

,因为它的浮点值而不是整数? – Olian04

回答

6
print(-1 * (605 % 11))  #-> 0 

整数算术。这里没有惊喜。

​​

这里是您可能会惊讶的地方。 0.5*1210 % 11评估为浮点零,然后-1 * 0.0导致为负零,这是浮点型。它的存在是因为它使得一些数字算法的边缘情况更容易实现。

print(-1 * (0.5*1210) % 11) #-> 0.0 

下面是比Python更熟悉浮点的人可能会感到惊讶。 -1 * (0.5*1210)的计算结果为-605.0,但随后在-605.0 % 11中,Python将%操作定义为返回与分母相同符号的结果,而不是分子,因此返回0.0而不是-0.0