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

So. Я не понимаю, почему разделение терпит неудачу и возвращает 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 (целое число). В противном случае вы получите 76.

+0

Благодарим вас за разъяснение! Мой код, однако, возвращает '76' .. и когда я добавляю float, он возвращает' 76.0'. Я буду использовать ответ LFJ, но спасибо вам большое! –

+1

См. Примечание в конце. Вам действительно нужно '100.0', а не просто' 100' –

3

key['nr_two'] является целым числом и поэтому key['nr_one']. Поэтому, когда они делятся, результат вынужден быть целым числом в версиях Python 2x (в Python 3x это ограничение не существует, и ваш код будет работать нормально). То, что вы получаете, равно 0, которое позже умножается на 100, так что все равно 0, но float, 0.0.

1

Для достижения float разделения в Python 2.x вы можете просто добавить:

from __future__ import division 

Таким образом, вы не должны конвертировать ваши номера каждый раз, когда вы разделите их.