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
感谢
我认为除法操作有一些不一致,但我不确定。奇怪的除法结果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
感谢
这是由于方式floating point numbers are represented。 1.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
,即使这可能不是内部表示为该数字。
感谢您的详细解答。即使逻辑清晰 - 这种行为在这种直观的操作中会产生误导。 – Baba
@Baba:或许这是使用浮点数字的一个注意事项。有更多的浮点数比计算机可能希望精确表示的浮点数更多,所以这是使用浮点数时要注意的事情。 –