この関数は、このタスクを達成したが、より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)
ジャスト提案:現在の件名行が適切にあなたの質問の推力をキャプチャしません。今のところ、被験者を読んでいる人のほとんどは、「どうして彼は単にround()を使っていないのですか?そして、彼らの第二の思想は、「ああ、多分彼は浮動小数点がunintuitively丸め方法に問題があり、そのため彼は、 'decimal'モジュールを見てする必要があります」となります。これらのタイプの質問は、何度も何度もStack Overflowで尋ねられています。あなたはそれらの質問とあなたの質問を区別する件名を選ぶべきです。特に –
、あなたは[この](http://stackoverflow.com/questions/3410976/how-to-round-a-number-to-significant-figuresあなたは、単に複製していないことが明らかに件名をしたいです-in-python?rq = 1)。あるいは、もしこれが*その複製であれば、このものはそのように閉じなければなりません。 –
@JohnY、明快さの欠如を指摘してくれてありがとう。うまくいけば更新された主題はよりよいです。 –