我在处理这些新运营商时遇到了麻烦。输出显示它们是相同的,但我不明白为什么。在像C这样的语言中,这些不会产生相同的结果。
这是我的代码
x = 6
y = 4
t = 3
print " %f e %f" % (x//y, x/y)
输出是这样的:
1.000000 e 1.000000
答案 0 :(得分:1)
在Python 2中,两个整数之间的除法产生一个整数,就像在C中一样。如果您使用/
或//
,则无关紧要。< / p>
在Python 3中,使用/
的两个整数之间的除法会产生浮点数,但//
会产生整数。
根据代码中的print
语句,您使用的是Python 2。
答案 1 :(得分:1)
这里的故事要比type of the output更多。在Python 2.7中,您可能会期望NaN
截断,以及/
层,这有时会导致不同的答案,即使输出在两种情况下都被强制转换为int。事实并非如此。
在Python 2中,两个运算符的输出都是积分的,无论输入的符号如何,两者的结果都是相同的。
//
使用Python 3,您可以看到它们确实执行了不同的操作。具体而言,Python 2.7.10 (default, Jul 14 2015, 19:46:27)
[GCC 4.8.2] on linux
> (6/4, 6//4)
=> (1, 1)
> (-6/4, -6//4)
=> (-2, -2)
> (6/-4, 6//-4) # Shouldn't really be different than the above
=> (-2, -2) # ... and, isn't.
根本不会圆。
/
对于Python 2或Python 3,这些运算符似乎没有很好的文档记录,正如我之前在该问题的评论中所提到的,因此任何行为都可以被认为是“正确的”。