рассчитать процентную разницу - питон - PullRequest
0 голосов
/ 22 февраля 2019

Я рассчитываю процентную разницу между двумя значениями в списке.

#cal percentage dff: (val2/val)/100
values = [0.11889, 0.07485, 0.01070, 0.03076, 0.01606]
values = [int(round(i*100)) for i in values]

conversion_values = []
for x in range(1, len(values), 1):
    val_1 = values[x-1]
    if val_1 == 0.0: #Check if val_1 is 0.
        conversion_values.append('-')
    else:
        val_2 = values[x]
        diff = (val_2/val_1)*100
        conversion_values.append(diff)

conversion_values

output:
[0, 0, 300, 0]

Желаемый вывод:

   [58, 14, 300, 67]

Не уверены, что я здесь не так делаю?В Excel этот расчет работает нормально, но не здесь, должно быть что-то, что связано с десятичными точками ??

Примечание. Это не вопрос процентного изменения, это совсем другое дело.

Ответы [ 2 ]

0 голосов
/ 22 февраля 2019

Похоже, вы используете целочисленное деление.Пожалуйста, перепишите это

diff = (val_2/val_1)*100

этому

diff = (val_2/float(val_1))*100

или даже этому

diff = (val_2/(val_1 * 1.0))*100
0 голосов
/ 22 февраля 2019

Вы теряете точность при выполнении (val_2)/val_1, поэтому конвертируйте любой из них в число с плавающей точкой, чтобы получить конечный результат как число с плавающей точкой, а затем конвертируйте результат в int

values = [0.11889, 0.07485, 0.01070, 0.03076, 0.01606]
values = [int(round(i*100)) for i in values]

conversion_values = []
for x in range(1, len(values), 1):
    val_1 = values[x-1]
    if val_1 == 0.0: #Check if val_1 is 0.
        conversion_values.append('-')
    else:
        val_2 = values[x]
        diff = int(round((float(val_2)/val_1)*100)) # change to float -->round--> int
        conversion_values.append(diff)

conversion_values

Вывод:

[58, 14, 300, 67]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...