在 C# 中将非常大的指数转换为小数

convert very big exponential to decimal in c#

5.35754303593134E+300 到 5357543035931340000000000000000000 ... 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();
        }
    }
}

执行以下操作之一,

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

两者都有效。

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

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

您可以将其保存为双精度(Math.Pow return 类型并且您 甚至 不需要获取它的字符串表示形式并将其解析为在这种情况下再次加倍)或 BigInteger.

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

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

如果你想得到这个值,它是字符串表示,你可以使用 "E" standard numeric format like;

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

或者您可以使用 Jon Skeet 的 DoubleConverter class 其值的精确表示;

DoubleConverter.ToExactString(s) // 5357543035931336604742125245300009052807024058527668037218751941851755255624680612465991894078479290637973364587765734125935726428461570217992288787349287401967283887412115492710537302531185570938977091076523237491790970633699383779582771973038531457285598238843271083830214915826312193418602834034688