在c#中将非常大的指数转换为十进制

时间:2015-04-29 10:23:00

标签: c# int exponential

5.35754303593134E + 300至53575430359313400000000000000000000 ... 000000000

任何人都可以这样做,因为这个数字非常大吗?

我试过了:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            double s = double.Parse((System.Math.Pow(2, 999)).ToString(), System.Globalization.NumberStyles.Float);
            Console.WriteLine("value={0}", s);
            Console.ReadKey();
        }
    }
}

2 个答案:

答案 0 :(得分:1)

执行以下操作之一

Console.WriteLine(s.ToString("N0")); //comma separated
Console.WriteLine(s.ToString("F0")); 

两者都有效。

答案 1 :(得分:0)

你的标题和代码说的不同但是......

基本上,你不能decimal无法保持此值,因为它超出了它的范围。它的范围从7.9 x 10 28 到7.9 x 10 28

您可以将其保存为double(Math.Pow返回类型,并且甚至需要获取字符串表示并在这种情况下将其解析为双倍)或BigInteger

double s = Math.Pow(2, 999);

BigInteger s = (BigInteger)Math.Pow(2, 999);

如果你想获得这个值的字符串表示,你可以使用"E" standard numeric format之类的;

s.ToString("E14") // 5,35754303593134E+300

或者你可以使用Jon Skeet的DoubleConverter class来确切表示它的价值;

DoubleConverter.ToExactString(s) // 5357543035931336604742125245300009052807024058527668037218751941851755255624680612465991894078479290637973364587765734125935726428461570217992288787349287401967283887412115492710537302531185570938977091076523237491790970633699383779582771973038531457285598238843271083830214915826312193418602834034688