2017-01-27 2 views
2

Iは有効数字の指定された数に誤差を丸め、および対応する桁の測定値の周りであろう、測定および誤差推定値を与えられた機能が欲しいです。ここでは、入力と期待される出力の例です:測定値とその誤差見積もりを、Pythonで指定された有効数字に丸めるにはどうすればよいですか?

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

Typically errors are reported with 2 significant figures.私はこのレベルの精度で値の誤差推定値を戻し、また正しい小数点以下に値を切り捨てるだろう機能が欲しいです。

+0

ジャスト提案:現在の件名行が適切にあなたの質問の推力をキャプチャしません。今のところ、被験者を読んでいる人のほとんどは、「どうして彼は単にround()を使っていないのですか?そして、彼らの第二の思想は、「ああ、多分彼は浮動小数点がunintuitively丸め方法に問題があり、そのため彼は、 'decimal'モジュールを見てする必要があります」となります。これらのタイプの質問は、何度も何度もStack Overflowで尋ねられています。あなたはそれらの質問とあなたの質問を区別する件名を選ぶべきです。特に –

+0

、あなたは[この](http://stackoverflow.com/questions/3410976/how-to-round-a-number-to-significant-figuresあなたは、単に複製していないことが明らかに件名をしたいです-in-python?rq = 1)。あるいは、もしこれが*その複製であれば、このものはそのように閉じなければなりません。 –

+0

@JohnY、明快さの欠如を指摘してくれてありがとう。うまくいけば更新された主題はよりよいです。 –

答えて

0

この関数は、このタスクを達成したが、よりPython的方法がある場合は別の答えを追加してください。ここ

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) 

は一例です1よりもはるかに大きい値:

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

Pythonはこれを達成するための組み込み関数があります。

round(num, ndigits) 

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

+0

これは、関心の数字は小数点の後にあるとき、これは、いくつかのケースでのみ動作します所望の出力 – Wondercricket

+0

を与えるものではありません。 'ndigits'は有効数字ではなく、小数点以下の桁数です。私はこれをもっと明確にするように主題を更新しました。 –

関連する問題