代码之家  ›  专栏  ›  技术社区  ›  Boosted_d16

计算百分比差异-python

  •  1
  • Boosted_d16  · 技术社区  · 7 年前

    我正在计算列表中两个值之间的百分比差异。

    #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 回复  |  直到 7 年前
        1
  •  3
  •   mad_    7 年前

    你在表演时失去了精准度 (val_2)/val_1 因此,将它们中的任何一个转换为float以获得作为float的最终结果,然后将结果转换为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]
    
        2
  •  1
  •   Andry Shutka    7 年前

    看起来你用的是整数除法。 请重写这个

    diff = (val_2/val_1)*100
    

    对此

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

    甚至这个

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