注意: この質問は有効数字に関するものです。「小数点以下の桁数」などの問題ではありません。
編集: この質問は、10 進数モジュールの有効数字の複製ではありません。2 つの質問は、まったく異なる問題について尋ねています。関数 about が特定の入力に対して目的の値を返さない理由を知りたいです。decimal モジュールの有効数字に対する回答は、この質問に対応していません。
次の関数は、指定された有効数字数の float の文字列表現を返すことになっています。
import decimal
def to_sigfigs(value, sigfigs):
return str(decimal.Context(prec=sigfigs).create_decimal(value))
一見すると、うまくいくように見えます:
print to_sigfigs(0.000003141592653589793, 5)
# 0.0000031416
print to_sigfigs(0.000001, 5)
# 0.0000010000
print to_sigfigs(3.141592653589793, 5)
# 3.1416
...しかし
print to_sigfigs(1.0, 5)
# 1
最後の式 (IOW、1.0 の有効数字 5 桁の表現) の目的の出力は、文字列 '1.0000' です。実際の出力は文字列 '1' です。
私は何かを誤解していますか、それともバグdecimal
ですか?