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