将舍入误差保留为一位有效数字,并根据误差的位数舍入值。

4

我正在尝试编写一个函数,该函数将接受错误值列表及其相关参数,并:

  1. 将错误值四舍五入到1个有效数字(根据惯例确定)
  2. 将参数值四舍五入到其关联错误中存在的数字。

例如,如果我的列表如下所示:

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个回答

6

您只需要修改函数,使其接受第二个数字以告知它要舍入到哪里。

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

数字已正确四舍五入,但您需要进行其他操作才能将它们转换为具有正确有效数字位数的字符串。

这是一个很棒的答案,对原函数进行简单修改就可以完美运行。末尾的零并不是必须的,所以没关系。谢谢! - Gabriel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接