繁体   English   中英

如何在Python中将度量及其误差估计四舍五入为指定数量的有效数字?

How would I round a measurement and its error estimate to a specified number of significant figures in Python?

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

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

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

错误通常以2个有效数字来报告。 我想要一个函数,该函数将以这种精度返回值的错误估计,并且还将值截断为正确的小数位。

2 个回复

此函数可以完成此任务,但是如果有更多Pythonic方法,请添加另一个答案。

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

这是列出的示例:

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

下面是一个值的示例,该值大于1但四舍五入到小数位:

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

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

>>> r = 6371293.103132049
>>> r_err = 14493.004419708
>>> round_error(r, r_err)
(6371000.0, 14000.0)

Python具有内置功能来实现此目的:

round(num, ndigits)

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

2 四舍五入到任意数量的有效数字

如何将任何数字(不仅仅是整数 > 0)四舍五入为 N 个有效数字? 例如,如果我想四舍五入到三位有效数字,我正在寻找一个可以采用的公式: 1,239,451 并返回 1,240,000 12.1257 并返回 12.1 .0681 并返回 .0681 5 并返回 5 自然地 ...

4 如何在Java中将数字四舍五入到6位有效数字?

所以我有这个代码 所以我在这里找到一个例子,告诉我这样做 那就是我尝试过的,它绕着米数四舍五入,但是英寸,英尺,码等数字却没有四舍五入。 我做错了吗? 解决这个问题的正确方法是什么? 编辑 :好的,所以我发现了一些可以解决的问题,以防其他人使用它而不是使用它: ...

5 四舍五入有效数字规则

有什么方法可以将有效数字规则应用于Excel工作表,即从宏打印值? 还是以任何方式通过VBA宏计算出的值都通过有效数字规则,然后打印在excel表上? ...

7 在 numpy 中四舍五入到有效数字

我试过搜索这个,但找不到满意的答案。 我想获取一个数字列表/数组并将它们全部四舍五入为 n 个有效数字。 我已经写了一个函数来做到这一点,但我想知道是否有一个标准的方法? 我已经搜索过,但找不到。 例子: 谢谢 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM