如何将测量及其误差估计值舍入到Python中指定数量的有效数字?

时间:2017-01-27 15:41:17

标签: python rounding precision

我想要一个给出测量和误差估计的函数,将误差四舍五入到指定数量的有效数字,并将测量值四舍五入到相应的数字。以下是输入和预期输出的示例:

grepl

Typically errors are reported with 2 significant figures.我想要一个函数,它将使用这个精度级别返回值的误差估计值,并将值截断为正确的小数位。

2 个答案:

答案 0 :(得分:0)

此功能完成此任务,但如果有更多Pythonic方法,请添加另一个答案。

>>> g = 6.6740813489701e-11
>>> g_err = 0.0003133212341e-11
>>> round_sig_figs(g, g_err, sig_figs=2)
(6.67408e-11, 3.1e-15)

以下是列出的示例:

import numpy as np

def round_sig_figs(val, val_err, sig_figs=2):
    '''
    Round a value and its error estimate to a certain number 
    of significant figures (on the error estimate).  By default 2
    significant figures are used.
    '''

    n = int(np.log10(val_err))  # displacement from ones place
    if val_err >= 1:
        n += 1

    scale = 10 ** (sig_figs - n)
    val = round(val * scale) / scale
    val_err = round(val_err * scale) / scale

    return val, val_err

以下是一个大于1但是在小数位上舍入的值的示例:

>>> g = 6.6740813489701e-11
>>> g_err = 0.0003133212341e-11
>>> round_sig_figs(g, g_err)
(6.67408e-11, 3.1e-15)

这是一个比一个大得多的值的例子:

>>> g_earth = 9.80665
>>> g_earth_err = 0.042749999
>>> round_error(g_earth, g_earth_err)
(9.807, 0.043)

答案 1 :(得分:0)

Python有一个内置函数来实现这个目的:

round(num, ndigits)

请参阅: https://docs.python.org/2/library/functions.html#round