質問編集履歴

3

import mathを追記

2020/10/21 00:02

投稿

ssm
ssm

スコア1

test CHANGED
File without changes
test CHANGED
@@ -50,6 +50,8 @@
50
50
 
51
51
  ```Python
52
52
 
53
+ import math
54
+
53
55
  import decimal
54
56
 
55
57
  def sig_digits(x, n):

2

修正後プログラムの追加

2020/10/21 00:02

投稿

ssm
ssm

スコア1

test CHANGED
File without changes
test CHANGED
@@ -39,3 +39,33 @@
39
39
 
40
40
 
41
41
  負の小数なども含め、大体の数字はこのプログラムで一応正しく丸められました。
42
+
43
+
44
+
45
+ 追記:
46
+
47
+ いただいた回答やコメントを参考にプログラムを書き換えました。このコードではうまくいかない事例などありましたらご教示願います。
48
+
49
+
50
+
51
+ ```Python
52
+
53
+ import decimal
54
+
55
+ def sig_digits(x, n):
56
+
57
+ if x==0:
58
+
59
+ return 0
60
+
61
+ else:
62
+
63
+ digits=math.floor(decimal.Decimal(abs(x)).log10())+1 #桁数を取得する
64
+
65
+ x=decimal.Decimal(x) #十進数に直す
66
+
67
+ return round(x, -digits+n) #n桁に丸める
68
+
69
+ sig_digits(35.089667,5)
70
+
71
+ ```

1

初心者マークをon

2020/10/20 15:26

投稿

ssm
ssm

スコア1

test CHANGED
File without changes
test CHANGED
@@ -2,11 +2,9 @@
2
2
 
3
3
 
4
4
 
5
- 計算の際に有効数字を考慮したく、一応は目的の動作をするものが書けたもののプログラムに欠陥がないか、またもっと良い実装方法がないか知りたいです。
5
+ 計算の際に有効数字を考慮したく、一応は目的の動作をするものが書けたもののプログラムに欠陥がないか、またより洗練された実装方法がないか知りたいです。
6
6
 
7
- また、例えば3桁の有効数字を考える場合に1.2ではなく1.20と表示するなど、さら機能を洗練させていけるいいなと思っています。
7
+ 加えて、例えば3桁の有効数字を考える場合に1.2ではなく1.20と表示する、0.01ではく0.0100と表示するなど、表示方法ついても洗練させられれば考えています。
8
-
9
-
10
8
 
11
9
  ### 該当のソースコード
12
10