2010-10-03 125 views
5

我有一個奇怪的問題在Python:不正確地進行分工:爲什麼這個分區沒有正確執行?

print pointB[1] 
print pointA[1] 
print pointB[0] 
print pointA[0] 
print (pointB[1]-pointA[1])/(pointB[0]-pointA[0]) 

這些結果如下:

100 
50 
100 
40 
0 

感謝

+5

其整數除法從py 2.x中,即'5/6 = 0',試着將denom或分子先投射出去 – Anycorn 2010-10-03 18:28:08

+0

參見http://stackoverflow.com/questions/117250/how-do-i-get-a-decimal-value-when-using-在-python-division-operator-in-python,http://stackoverflow.com/questions/1787249/why-doesnt-this-division-work-in-python,http://stackoverflow.com/questions/2958684/python-部門 – 2010-10-03 18:43:37

回答

17

上述行爲是真實的Python 2 。在Python 3中修復了/的行爲。在Python 2中,您可以使用:

from __future__ import division 

然後使用/來獲得您想要的結果。

>>> 5/2 
2 
>>> from __future__ import division 
>>> 5/2 
2.5 

因爲您將兩個整數,你得到的結果爲整數。

或者,將其中一個數字更改爲float

>>> 5.0/2 
2.5 
+7

我不確定它需要什麼是'固定的' - 整數除法按照它應該做的那樣工作。加上Python 3已經出現了近2年...... – 2010-10-03 18:34:20

+0

我會引用PEP238,'這使得表達式期望浮點或複雜的結果容易出錯,當整數不是預期的但可能作爲輸入。「我也懷疑他會使用Python 3.0,因爲我想大家現在明確堅持2.6。但我也在學習,所以我可能錯了。 – user225312 2010-10-03 18:36:57

+2

許多語言使用整數除法Python 2方式(如果缺少動態輸入,這並不奇怪)。我認爲它被認爲是一個設計缺陷,或者它不會被改變:)順便說一句,最新版本是2.7和3.1(在3.2版本已經在alpha)。 – 2010-10-03 18:45:53

3

這是在Python中如何使用整數除法。在計算中使用浮點數或浮點數:

float(pointB[1]-pointA[1])/(pointB[0]-pointA[0]) 
+0

在所有情況下,投射浮動並不能正確工作。 – 2016-04-28 12:45:24

9

它正確完成。

50/60 = 0

也許你正在尋找的50.0/60.0 = 0.83333333333333337,你可以投你的變數浮動吃出:

print float(pointB[1]-pointA[1])/(pointB[0]-pointA[0]) 
相關問題