6E-308转换成正常数字 可以不呢?如果可以 该怎么做!
6*Math.Pow(10,-308)自己写成这样 计算出来还是6E-308
这个报错:(大于或小于Decimal最大数 最小数)Convert.ToDecimal(Decimal.Parse("6E-308", System.Globalization.NumberStyles.Float));
是“科学计数法”(scientific notation)吧
恩 恩
@青蛙王子。: 代码如下:
var number = 6E-308;
var e = 308;
StringBuilder builder = new StringBuilder(e + 6);
builder.Append("{0:0.");
for (int i = 0; i < 308; i++)
{
builder.Append("#");
}
builder.Append("}");
Console.WriteLine(string.Format(builder.ToString(), number));
你的报错“大于或小于Decimal最大数 最小数”,那是因为你要转换的数字小于decimal允许的最小数了呗,你用double试试就行了。
double d = Convert.ToDouble("6E-308");
这是-308次幂,这么大的幂表示这个数字特别特别小,这样的数字怎么表示成普通的数字啊?要表示成普通的数字,你前面会看到几百个0,后面才是个数字,这样谁会看?
不过假如你就是不想科学计数法,那我给你个代码,可以把科学计数法的数字转成正常的数字字符串的。看方法:
private static string doubleFormat(Double doubleValue)
{
try
{
string doubleValueStr = doubleValue.ToString();
int eIndex = doubleValueStr.ToUpper().IndexOf("E");
String format = "";
if (eIndex == -1)
{
return doubleValueStr;
}
else
{
string cardinalNumberStr = doubleValueStr.Substring(0, eIndex);
string exponentialStr = doubleValueStr.Substring(eIndex + 1);
if (exponentialStr.StartsWith("+"))
{
exponentialStr = exponentialStr.Substring(1);
}
int exponential = Int32.Parse(exponentialStr);
if (exponential > 0)
{
if ((cardinalNumberStr.Length - 2 - exponential) > 0)
{
format = "#.";
for (int i = 0; i < (cardinalNumberStr.Length - 2 - exponential); i++)
{
format += 0;
}
}
else
{
format = "#.0";
}
}
else if (exponential < 0)
{
format = "0.";
for (int i = 0; i < (cardinalNumberStr.Substring(cardinalNumberStr.IndexOf(".") + 1).Length - exponential); i++)
{
format += 0;
}
}
else
{
format = "#.0";
}
if (format.Length == 2)
{
format += 0;
}
return doubleValue.ToString(format);
}
}
catch (Exception e)
{
}
return "";
}
使用的时候调用就行了