C# 将指数数转换为整数

C# 将指数数转换为整数,c#,.net,c#-4.0,C#,.net,C# 4.0,将“2.3456754342345466E+36”转换为完整数字: var sm = Convert.ToDouble(splitted[0]) + Convert.ToDouble(splitted[1]); **//sm value is === "2.3456754342345466E+36"** var d = Decimal.Parse(sm.ToString(), System.Globalization.NumberStyles.Float); if (splitted[

“2.3456754342345466E+36”
转换为完整数字:

var sm = Convert.ToDouble(splitted[0]) + Convert.ToDouble(splitted[1]);  

**//sm value is === "2.3456754342345466E+36"**

var d = Decimal.Parse(sm.ToString(), 
System.Globalization.NumberStyles.Float);
if (splitted[0].Length ==Convert.ToString(d).Length)
 {
 sum.Add(""+sm);
 }
else
{
 sum.Add(""+splitted[0]);
}
Decimal.Parse(sm.ToString()
正在抛出:

值对于小数来说太大或太小


有人能帮忙吗。

这是因为
十进制
的最大值约为
7.9e+28
,因此它无法容纳您的数字。您需要将其存储在
双精度
中。当您要打印put数字时,您可以使用
ToString()以任何方式格式化它
带有格式说明符的方法。例如,
F0
将给出一个不带小数的直数:

var sm = "2.3456754342345466E+36";
var d = double.Parse(sm, System.Globalization.NumberStyles.Float);
Console.WriteLine(d.ToString("F0")); //Prints 2345675434234550000000000000000000000

它工作得很好,但最后我得到了满满的零,但我需要精确的结果,因为我在做求和运算。你是什么意思?这是一个精确的结果。这些零是数字的一部分,有
+36
位。如果你不想要结尾的零,你只想要
234567543423455
,那么这是一个完全不同的结果这个数字是
2.34567543423455e+14
。如果你把这个数字
2.34567543423455e+14
和我的答案中的代码一起使用,你就没有零了。如果你想从
+36
开始删除零,那么你可以像这样简单地修剪它们
d.ToString(“F0”).TrimEnd.ToString(“0”)
.d.ToString(“F0”).TrimEnd('0').TrimEnd('0'))帮我解决了问题,谢谢。