2016-12-09 38 views
2

我做了一個xlrd給json解析腳本,它不會分割變量。它總是返回零...這我使用的劃分變量的代碼是:在Python中劃分值

if not row_values[2]: 
    key['nr_one'] = 0 
else: 
    key['nr_one'] = int(row_values[2]) 
if not row_values[4]: 
    key['nr_two'] = 0 
else:  
    key['nr_two'] = int(row_values[4]) 
try: 
    key['perc'] = float(key['nr_two']/key['nr_one']*100) 
except ZeroDivisionError: 
    key['perc'] = 0 

我已經在腳本的末尾印有下面的代碼:

print('one') 
print(key['nr_one']) 
print('two') 
print(key['nr_two']) 
print('perc') 
print(key['perc']) 

這將返回:

one 
103386547 
two 
135680054 
perc 
0.0 

所以。我不明白爲什麼分區失敗並返回0?可能有人請幫我格式化計算百分比

回答

5

應該float(key['nr_two']) /key['nr_one']*100

+0

太棒了!謝謝! –

+0

很高興它的作品:-) –

+0

當我被允許時,我會接受答案! –

5

整數除法的好辦法是這樣的:

1/3 #=> 0

理解這種結果的最簡單方法是不是一小部分,但作爲回答問題"How many times do 3 fit in 1?"

所以0乘以100仍然是:

1/3 * 100 #=> 0

你需要

100.0*1/3 #=> 33.333333

爲您的代碼:

key['perc'] = 100.0*key['nr_two']/key['nr_one'](不使用float(...)

它返回:

76.1987808465937

注意:您真的需要鍵入100.0(浮點數),而不僅僅是100(一個int)。否則你會得到76

+0

謝謝你的解釋!然而,我的代碼返回'76' ..當我添加一個浮點數時,它返回'76.0'。我將使用LFJ的答案,但非常感謝你! –

+1

最後請注意。你真的需要'100.0',而不只是'100' –

3

key['nr_two']是整數,所以是key['nr_one']。因此,當它們被分割時,結果被強制爲一個整數(在Python 2x版本,在Python 3x中這個限制不存在,您的代碼將運行得很好)。因此,你得到的是0,後面乘以100,所以仍然爲0,但是浮點數爲0.0。

1

爲了實現在Python 2.x中float師,你可以再補充:

from __future__ import division 

這樣你就不需要你的號碼每次他們分開的時間轉換。