前提・実現したいこと
計算の際に有効数字を考慮したく、一応は目的の動作をするものが書けたもののプログラムに欠陥がないか、またより洗練された実装方法がないか知りたいです。
加えて、例えば3桁の有効数字を考える場合に1.2ではなく1.20と表示する、0.01ではなく0.0100と表示するなど、表示方法についても洗練させられればと考えています。
該当のソースコード
Python
1def sig_digits(x, n): 2 #xの桁数を取得する 3 import math 4 if x==0: 5 return 0 6 else: 7 digits=math.floor(math.log10(abs(x)))+1 8 #n桁に丸める 9 return round(x, -digits+n)
試したこと
負の小数なども含め、大体の数字はこのプログラムで一応正しく丸められました。
追記:
いただいた回答やコメントを参考にプログラムを書き換えました。このコードではうまくいかない事例などありましたらご教示願います。
Python
1import math 2import decimal 3def sig_digits(x, n): 4 if x==0: 5 return 0 6 else: 7 digits=math.floor(decimal.Decimal(abs(x)).log10())+1 #桁数を取得する 8 x=decimal.Decimal(x) #十進数に直す 9 return round(x, -digits+n) #n桁に丸める 10sig_digits(35.089667,5)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/10/20 07:30
2020/10/20 11:18
2020/10/20 11:55
2020/10/20 11:56
2020/10/20 12:06
2020/10/20 12:15
2020/10/20 12:31 編集
2020/10/20 12:32
2020/10/20 12:40
2020/10/20 13:52 編集
2020/10/20 14:10
2020/10/20 15:24
2020/10/20 15:27
2020/10/20 23:31
2020/10/21 00:04
2020/10/21 03:56 編集
2020/10/21 04:13 編集
2020/10/21 04:19
2020/10/21 04:25
2020/10/21 08:47
2020/10/21 08:49
2020/10/21 09:12
2020/10/21 09:15
2020/10/21 09:17
2020/10/21 11:40