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:或許這是使用浮點數字的一個注意事項。有更多的浮點數比計算機可能希望精確表示的浮點數更多,所以這是使用浮點數時要注意的事情。 –