2015-06-14 102 views
7

我认为除法操作有一些不一致,但我不确定。奇怪的除法结果python 3

在下面的代码中,我希望// c为100.0,或者b // c为-99.0。

a = 1.0 
b = -1.0 
c = 0.01 

print (a/c) 
print (a//c) 
print (b/c) 
print (b//c) 

给出:

100.0 
99.0 
-100.0 
-100.0 

感谢

回答

3

这是由于方式floating point numbers are represented1.0不是0.01的100倍(只要内部表示浮点)。运营商//执行划分并对结果进行分层,因此可能内部数字略小于100.0,这导致它被分成99.0

此外,Python 3.x使用a different approach向您显示与Python 2.x相比的浮点数。这意味着1.0/0.01的结果虽然内部略小于100.0,但会以100.0的形式显示给您,因为该算法确定该数字足够接近100.0而被认为等于100.0。这就是为什么1.0/0.01向您显示为100.0,即使这可能不是内部表示为该数字。

+0

感谢您的详细解答。即使逻辑清晰 - 这种行为在这种直观的操作中会产生误导。 – Baba

+0

@Baba:或许这是使用浮点数字的一个注意事项。有更多的浮点数比计算机可能希望精确表示的浮点数更多,所以这是使用浮点数时要注意的事情。 –