根据错误中的位数将错误舍入为1个有效数字和舍入值

时间:2014-04-21 22:22:20

标签: python

我正在尝试编写一个函数,该函数将获取错误值列表以及与这些错误相关的参数:

  1. 将错误值舍入为1个有效数字(按惯例建立)
  2. 将参数值舍入为其关联错误中的位数。
  3. 例如,如果我的列表看起来像:

    errors = [0.0097, 0.83, 0.05, 0.0045]
    params = [0.0240, 7.85, 0.75, 12.5]
    

    应用此类函数后生成的列表如下所示:

    errors_r = [0.01, 0.8, 0.05, 0.005]
    params_r = [0.02, 7.9, 0.75, 12.500]
    

    首先将错误四舍五入为1位有效数字,然后将参数四舍五入为错误最终产生的任何位数。

    以下从这个问题How to round a number to significant figures in Python中获取的函数可以很好地将错误四舍五入为1位有效数字:

    from math import log10, floor
    def round_to_1(x):
        return round(x, -int(floor(log10(x))))
    

    要将params列表中的值四舍五入到其关联错误中的位数,我可以使用round()函数,并在舍入后将其输入错误中的小数位数,但我不确定如何才能达到这个数字。

1 个答案:

答案 0 :(得分:5)

您需要做的就是修改函数以接收第二个数字,让它知道将它舍入到的位置。

def round_to_reference(x, y):
    return round(x, -int(floor(log10(y))))

总而言之,你可以这样做:

errors_r = map(round_to_1, errors)
params_r = map(round_to_reference, params, errors_r)

这件事不会做的是用正确数量的尾随零点打印数字。例如,

>>> round_to_reference(12.5, 0.005)
12.5
>>> round_to_reference(12.51234, 0.005)
12.512

这些数字已正确舍入,但您需要执行其他操作才能将其转换为具有正确有效位数的字符串。