ベタなやり方しか思いつきませんでしたが。
cs
1 var d = 4.20365978E-42;
2 var d_log10 = Math.Floor(Math.Log10(d)); //E-42の-42を計算
3 var pow_idx = Math.Pow(10, -d_log10); //E-42を取り除く為の乗数
4
5 d *= pow_idx;
6 d = Math.Round(d, 3, MidpointRounding.AwayFromZero);
7 d /= pow_idx;
8
9 Console.WriteLine(d); //4.204E-42
(2021/11/18 19:42 追記)
d<=0、d_log10==0の時に死ぬので、少し修正しました。
cs
1 if( d!=0 && !double.IsNaN(d) && !double.IsInfinity(d) )
2 {
3 var d_log10 = Math.Floor(Math.Log10(Math.Abs(d)));
4 if(d_log10 != 0 )
5 {
6 var pow_idx = Math.Pow(10, -d_log10);
7 d *= pow_idx;
8 d = Math.Round(d, 3, MidpointRounding.AwayFromZero);
9 d /= pow_idx;
10 }
11 else
12 {
13 d = Math.Round(d, 3, MidpointRounding.AwayFromZero);
14 }
15 }