2014-01-23 91 views
0

在一些簡單的數學中,這裏我試圖從總數中得到已經完成的目標的百分比。那些已經完成的是積極的。根據我的理解,下面的數學應該給我一個50的百分比,但是運行它,Python堅持給我零。爲什麼會這樣?爲什麼Python會將變量視爲整數,而不允許小數?

Total = 2 
Positives = 1 
Percentage = (Positives/Total)*100 
print ('Percentage is: ' + str(Stat) + '%\n') 

>>>Percentage is: 0% 
+0

您的代碼與您的輸出不匹配。 「Stat」沒有在任何地方定義。 – MattDMo

回答

1

要字面上聲明的浮子在它的末尾添加一個.0:整數

>>>Total = 2.0 
>>>Positives = 1.0 
>>>Percentage = (Positives/Total)*100 
>>>print Percentage 
50.0 

在Python2分割兩者返回一個整數。你至少需要一個浮點數才能返回浮點數。

3

在Python 2中,除法運算符(/)在兩個參數都是整數時返回一個int,如果至少一個參數是float,則返回一個float。

print 1/2 # 0 
print 1/2.0 # 0.5 

您可以使用from __future__ import division指令強制執行浮點除法。

from __future__ import division 
print 1/2 # 0.5 
print 1 // 2 # 0 (// is always integer division) 

Python 3默認情況下啓用了浮點除法。

此外,請注意,即使您沒有from __future__ import division,也會在Python 2和3中存在//運算符(整數除法),並且將始終返回一個整數。

最後請注意,我們談論浮點數http://en.wikipedia.org/wiki/IEEE_floating_point_number),不小數這裏。如果您確實需要小數(較慢,但具有任意精度),請查看Python標準庫中的decimal模塊。

1

如果你把所有的整數變成一個方程,Python假定你想要一個整數作爲結果。
(INT/INT == INT),所以下面的代碼返回零:

>>> 1/2 
0 

如果你想在結果的浮動,你需要確保你的輸入變量之一是float:
(INT /浮動=浮動)或(浮點/ INT =浮動)

>>> 1/2.0 
0.5 

您也可以使用強制做同樣的事情:

>>> float(1)/2 
0.5 

並不是說你必須在分裂發生之前將其中一個變量改爲浮點數,否則你會得到意想不到的結果。以下命令除以int(1)/ int(2),返回0,然後嘗試將0轉換爲浮點數:

>>> float(1/2) 
0.0 
相關問題