2015-07-20 103 views
10

我似乎無法在此網站上找到此答案,儘管它似乎很普通。我正在嘗試輸出兩個文件中的行數比例的雙倍。將int轉換爲雙Python

#Number of lines in each file 
inputLines = sum(1 for line in open(current_file)) 
outputLines = sum(1 for line in open(output_file)) 

然後得到的比例:

ratio = inputLines/outputLines 

但比似乎總是一個int和輪即使我初始化它想:

ratio = 1.0 

感謝。

回答

20

在python 中,兩個整數相除的結果總是一個整數。要強制浮師,你需要在部門使用至少一個浮動:

ratio = float(inputLines)/outputLines

要小心,不要做ratio = float(inputLines/outputLines):雖然,在一個浮動的效果,這是獲得一個後做整數除法,那麼結果將是「錯誤的」(如「不是你所期望的」)

在蟒蛇,the integer division behavior was changed,並在浮動兩個整數結果的劃分。你也可以在python 2.7中使用這個功能,把from __future__ import division放在你的文件中。


原因ratio = 1.0不工作是類型(在python)是,不變量的屬性 - 換句話說,變量沒有類型。

a= 1.0 # "a" is a float 
a= 1 # "a" is now a integer 
+0

啊,有道理,謝謝。 –

1

您需要將其中一個條件轉換爲浮點值。明確地通過使用float(即ratio = float(a)/bratio=a/float(b))或隱含地通過添加0.0ratio = (a+0.0)/b

如果使用Python 2,你可以將from __future__ import division作爲劃分不是整數而是浮點數。

1

事實上,當你劃分一個整數時,Python 2會返回一個整數。您可以在那裏int/int = float通過在你的文件的頂部放置此覆蓋此行爲在Python 3,喜歡的工作:

from __future__ import division 

或者更好的,只是停止使用Python 2 :)

3

你使用Python 2.X?

使用

>>> from __future__ import division 
>>> ratio = 2/5 
0.4 

獲取某個部門的float嘗試。

使用ratio = 1.0進行初始化不起作用,因爲使用ratio = inputLines/outputLines時,無論以前是什麼,您都將該變量重新分配給int。