teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

修正

2021/11/18 10:43

投稿

退会済みユーザー
answer CHANGED
@@ -9,4 +9,24 @@
9
9
  d /= pow_idx;
10
10
 
11
11
  Console.WriteLine(d); //4.204E-42
12
+ ```
13
+ ---
14
+ (2021/11/18 19:42 追記)
15
+ d<=0、d_log10==0の時に死ぬので、少し修正しました。
16
+ ```cs
17
+ if( d!=0 && !double.IsNaN(d) && !double.IsInfinity(d) )
18
+ {
19
+ var d_log10 = Math.Floor(Math.Log10(Math.Abs(d)));
20
+ if(d_log10 != 0 )
21
+ {
22
+ var pow_idx = Math.Pow(10, -d_log10);
23
+ d *= pow_idx;
24
+ d = Math.Round(d, 3, MidpointRounding.AwayFromZero);
25
+ d /= pow_idx;
26
+ }
27
+ else
28
+ {
29
+ d = Math.Round(d, 3, MidpointRounding.AwayFromZero);
30
+ }
31
+ }
12
32
  ```

1

修正

2021/11/18 10:43

投稿

退会済みユーザー
answer CHANGED
@@ -1,8 +1,8 @@
1
1
  ベタなやり方しか思いつきませんでしたが。
2
2
  ```cs
3
3
  var d = 4.20365978E-42;
4
- var l_log = Math.Floor(Math.Log10(d)); //E-42の-42を計算
4
+ var d_log10 = Math.Floor(Math.Log10(d)); //E-42の-42を計算
5
- var pow_idx = Math.Pow(10, -l_log); //E-42を取り除く為の乗数
5
+ var pow_idx = Math.Pow(10, -d_log10); //E-42を取り除く為の乗数
6
6
 
7
7
  d *= pow_idx;
8
8
  d = Math.Round(d, 3, MidpointRounding.AwayFromZero);