到1位有效数字的舍入误差及根据误差位数舍入值

5 投票
1 回答
1127 浏览
提问于 2025-04-18 03:39

我正在尝试写一个函数,这个函数可以接收一组错误值和与这些错误相关的参数,然后:

  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个有效数字,然后参数值会根据错误值的位数进行四舍五入。

下面这个函数是从这个问题中提取的,如何在Python中将数字四舍五入到有效数字,它很好地完成了将错误值四舍五入到1个有效数字的工作:

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

为了将params列表中的值四舍五入到与其相关的错误值的位数,我可以使用round()函数,并传入错误值四舍五入后的小数位数,但我不太确定该如何得到这个数字。

1 个回答

7

你需要做的就是修改这个函数,让它接受第二个数字,这样它就知道要四舍五入到哪个位置。

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

这些数字虽然四舍五入得很正确,但你还需要做一些其他的事情,把它们转换成带有正确有效数字的字符串。

撰写回答