在.NET中解析一个大的指数数

时间:2016-10-17 07:01:52

标签: c# parsing

我正在尝试将一些Java代码转换为C#,并遇到了解析.NET中非常大的指数数字的问题。

我要解析的数字是"1.79769313486232E+308"

我已经尝试过使用double(这是我正在翻译的代码中使用的)和decimal,但是两者都抛出了一个溢出异常,即数字太大了。

double result = double.Parse("1.79769313486232E+308",
    System.Globalization.NumberStyles.Float,
    System.Globalization.CultureInfo.InvariantCulture)

我也尝试了其他各种组合,例如使用NumberStyles.Any

这在Java中运行良好。但在我尝试转换code from Java之前,我希望在.NET中有另一个(本机)选项。有什么想法吗?

2 个答案:

答案 0 :(得分:3)

System.Numerics.BigInteger result = System.Numerics.BigInteger.Parse("1.79769313486232E+308", System.Globalization.NumberStyles.Float);

您可以尝试BigInteger添加对项目中System.Numerics的引用

修改

由于注释,当前数字可以用int表示(不丢失任何信息),因为它本身就是整数。这是科学记数法,所以这是如何翻译的。举个例子:

1.23E+11 or as 1.23 X 10^11

所以在他的情况下:

1.79769313486232E+308 = 1.79769313486232*10^308  

哪个远离双重边界,可以写成biginteger。这个数字本身是整数,所以没有问题!

答案 1 :(得分:0)

因为它太大了。

Double可以容忍: 1.7976931348623157E + 308

请参阅:this