字典中的舍入值(Python)

2024-09-30 08:36:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我对浮点数和四舍五入有一些问题。在

我有一个函数,它以字典作为输入。它找到所有值的平均值,然后计算每个值与平均值之间的差。答案应四舍五入到小数点后两位。在

我不明白为什么它不返回正确舍入的浮点值。有趣的是,当我在for循环中打印出x[i]时,它看起来正是我想要的。另外,我希望将值保留为数字,而不是带格式的字符串。在

def avgstuff(x):
    ppv = sum(x.values())/float(len(x))
    for i in x:
        x[i] = round(x[i] - ppv,2)
    return x

print avgstuff({'A': 40, 'C': 10, 'B': 25, 'E': 58, 'D': 153})

电流输出:
{'A': -17.199999999999999, 'C': -47.200000000000003, 'B': -32.200000000000003, 'E': 0.80000000000000004, 'D': 95.799999999999997}

我想要的输出:
{'A': -17.20, 'C': -47.20, 'B': -32.20, 'E': 0.80, 'D': 95.80}

我不想要的输出:
{'A': '-17.20', 'C': '-47.20', 'B': '-32.20', 'E': '0.80', 'D': '95.80'}


Tags: 函数字符串答案for字典def格式数字
2条回答

使用Decimal库:

from decimal import *
def avgstuff(x):
    ppv = sum(x.values())/len(x)
    for i in x:
        x[i] = Decimal(x[i]-ppv).quantize(Decimal('0.01'), rounding=ROUND_HALF_DOWN)

    return x

有关详细信息,请参见https://docs.python.org/2/library/decimal.html

如果要返回浮点而不是十进制对象,请使用循环中的行:

^{pr2}$

这里的问题是某些实数(例如0.2)不能完全转换为二进制。你需要无限量的比特。在

0.2*2=0余数0.4
0.4*2=0余数0.8
0.8*2=1余数0.6
0.6*2=1余数0.2

从这里开始一切都会重新开始。。。在

=>;(0.2)_dec=(0.001100110011…)

相关问题 更多 >

    热门问题