C# 中的指数
Exponents in C#
int trail = 14;
double mean = 14.00000587000000;
double sd = 4.47307944700000;
double zscore = double.MinValue;
zscore = (trail - mean) / sd; //zscore at this point is exponent value -1.3122950464645662E-06
zscore = Math.Round(zscore, 14); //-1.31229505E-06
Math.Round()
也保留指数值。应该使用 zscore.ToString("F14")
而不是 Math.Round()
函数将其转换为非指数值吗?请解释。
这些是完全独立的问题。
Math.Round
实际上会 return 一个新值 ,四舍五入到指定的小数点(至少,尽可能接近浮点数).
您可以在任何地方重复使用此结果值,并根据需要以 16 位小数的精度显示它,但它不应与原始值相同。
显示与否与Round
无关。
当您在数字上使用 ToString("F14")
时,这只是一个显示规范,不会以任何方式修改基础值 。基础值可能是一个数字,否则会显示或不会显示为指数表示法,并且可能有或实际上有 14 位有效数字。
它只是强制将数字显示为完整的小数,没有指数表示法,并指定了位数。所以这似乎是你真正想要的。
示例:
(可在此处在线执行:http://rextester.com/PZXDES55622)
double num = 0.00000123456789;
Console.WriteLine("original :");
Console.WriteLine(num.ToString());
Console.WriteLine(num.ToString("F6"));
Console.WriteLine(num.ToString("F10"));
Console.WriteLine(num.ToString("F14"));
Console.WriteLine("rounded to 6");
double rounded6 = Math.Round(num, 6);
Console.WriteLine(rounded6.ToString());
Console.WriteLine(rounded6.ToString("F6"));
Console.WriteLine(rounded6.ToString("F10"));
Console.WriteLine(rounded6.ToString("F14"));
Console.WriteLine("rounded to 10");
double rounded10 = Math.Round(num, 10);
Console.WriteLine(rounded10.ToString());
Console.WriteLine(rounded10.ToString("F6"));
Console.WriteLine(rounded10.ToString("F10"));
Console.WriteLine(rounded10.ToString("F14"));
将输出:
original :
1,23456789E-06
0,000001
0,0000012346
0,00000123456789
rounded to 6
1E-06
0,000001
0,0000010000
0,00000100000000
rounded to 10
1,2346E-06
0,000001
0,0000012346
0,00000123460000
int trail = 14;
double mean = 14.00000587000000;
double sd = 4.47307944700000;
double zscore = double.MinValue;
zscore = (trail - mean) / sd; //zscore at this point is exponent value -1.3122950464645662E-06
zscore = Math.Round(zscore, 14); //-1.31229505E-06
Math.Round()
也保留指数值。应该使用 zscore.ToString("F14")
而不是 Math.Round()
函数将其转换为非指数值吗?请解释。
这些是完全独立的问题。
Math.Round
实际上会 return 一个新值 ,四舍五入到指定的小数点(至少,尽可能接近浮点数).
您可以在任何地方重复使用此结果值,并根据需要以 16 位小数的精度显示它,但它不应与原始值相同。
显示与否与Round
无关。
当您在数字上使用 ToString("F14")
时,这只是一个显示规范,不会以任何方式修改基础值 。基础值可能是一个数字,否则会显示或不会显示为指数表示法,并且可能有或实际上有 14 位有效数字。
它只是强制将数字显示为完整的小数,没有指数表示法,并指定了位数。所以这似乎是你真正想要的。
示例:
(可在此处在线执行:http://rextester.com/PZXDES55622)
double num = 0.00000123456789;
Console.WriteLine("original :");
Console.WriteLine(num.ToString());
Console.WriteLine(num.ToString("F6"));
Console.WriteLine(num.ToString("F10"));
Console.WriteLine(num.ToString("F14"));
Console.WriteLine("rounded to 6");
double rounded6 = Math.Round(num, 6);
Console.WriteLine(rounded6.ToString());
Console.WriteLine(rounded6.ToString("F6"));
Console.WriteLine(rounded6.ToString("F10"));
Console.WriteLine(rounded6.ToString("F14"));
Console.WriteLine("rounded to 10");
double rounded10 = Math.Round(num, 10);
Console.WriteLine(rounded10.ToString());
Console.WriteLine(rounded10.ToString("F6"));
Console.WriteLine(rounded10.ToString("F10"));
Console.WriteLine(rounded10.ToString("F14"));
将输出:
original :
1,23456789E-06
0,000001
0,0000012346
0,00000123456789
rounded to 6
1E-06
0,000001
0,0000010000
0,00000100000000
rounded to 10
1,2346E-06
0,000001
0,0000012346
0,00000123460000