【问题标题】:Convert exponential number to full number将指数数转换为整数
【发布时间】:2018-05-09 18:29:19
【问题描述】:

"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() 正在投掷:

对于 Decimal,值太大或太小。

谁能帮忙。

【问题讨论】:

    标签: c# .net c#-4.0


    【解决方案1】:

    那是因为decimal 的最大值大约是7.9e+28,所以它不适合您的号码。您需要将其存储在double 中。当您想打印输入数字时,您可以使用带有格式说明符的ToString() 方法以任何您想要的方式对其进行格式化。例如,F0 将给出一个不带分数的直数:

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

    【讨论】:

    • 它工作正常,但最后我得到了全零,但我需要准确的结果,因为我正在做求和运算
    • 什么意思?这IS是一个准确的结果。这些零是您号码的一部分,其中有+36 数字。如果你不想要最后的零而只想要234567543423455,那么这是一个完全不同的数字,即2.34567543423455e+14。如果您将此号码2.34567543423455e+14 与我的答案中的代码一起使用,您将没有零。如果您想从+36 开始并删除零,那么您可以像d.ToString("F0").TrimEnd('0') 这样简单地修剪它们。
    • d.ToString("F0").TrimEnd('0') 帮助我解决了我的问题。谢谢。
    猜你喜欢
    • 2021-01-04
    • 2021-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-19
    • 1970-01-01
    相关资源
    最近更新 更多