我制作了一个xlrd到json解析脚本,它没有划分变量。它总是返回零...我用来划分变量的代码是:
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?请有人帮我格式化计算百分比的好方法
答案 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
。
答案 1 :(得分:5)
应为float(key['nr_two']) /key['nr_one']*100
答案 2 :(得分:3)
key['nr_two']
是整数,因此key['nr_one']
。因此,当它们被分割时,结果将被强制为Python 2x版本中的整数 (在Python 3x中,此限制不存在且您的代码运行得很好)。你得到的是0,后来乘以100,所以仍然是0但浮动,0.0。
答案 3 :(得分:1)
要在python 2.x中实现float
除法,您只需添加:
from __future__ import division
这样,每次分割时都不需要转换数字。