2016-12-09 35 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 

这样你就不需要你的号码每次他们分开的时间转换。