.NET中解析一个大指数数字

3

我正在尝试将一些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中运行良好。但在尝试将 Java代码转换之前,我希望在.NET中有另一个(本地)选项。有什么想法吗?


看起来这段代码是在引用最大可能的double值,那为什么不使用double.MaxValue呢? - Pieter Witvoet
2个回答

4
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
是的,您超出了 double 的范围。 - mybirthname
1
@Henrik - 1.79769313486232E+308 不是一个 double。它是一个非常大的整数。 - Enigmativity
@NightOwl888 我不会称之为一个 bug,因为它的行为已经被记录在文档中了。但我认为这是一个不幸的设计决策。 - Henrik
有文档说明可以将 double.MaxValue 转换为字符串,但无法将其解析回 double(甚至是 decimal)?这个文档在哪里? - NightOwl888
@NightOwl888 你正在尝试解析的数字略大于double.MaxValue,请参考Emad的答案。 - Henrik
显示剩余12条评论

0

因为它太大了,兄弟。

Double 可以容纳的最大值为: 1.7976931348623157E+308

请参见:this


这并没有提供问题的答案。如果要批评或请求作者澄清,请在他们的帖子下留言。-【来自审查】 - Borys Verebskyi
我已经回答了问题中提到的问题: - Emad
问题在于double.parse会抛出“溢出异常”,这是因为所涉及的数字超过了double.maxvalue。我说的有什么问题吗?因为我想知道是否有问题。 - Emad
主题发起人询问在.NET中解析大于最大双精度数的数字的另一个(本地)选项。 - Borys Verebskyi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接