如果没有OverflowException,将"1.79769313486232E + 308"转换为double?

Eri*_*ver 11 .net c# double

我有这个字符串"1.79769313486232E + 308",我试图将其转换为.NET数值(双??)但我得到以下异常.我在用Convert.ToDouble().进行此转换的正确方法是什么?

OverflowException:对于Double,值太大或太小

Jon*_*eet 22

不幸的是,这个值大于double.MaxValue,因此是例外.

正如codekaizen建议的那样,您可以对字符串进行硬编码测试.如果您是首先生成字符串的人,那么更好的(IMO)替代方法是使用"r"格式说明符.然后你生成的字符串将是"1.7976931348623157E + 308",然后正确解析:

string s = double.MaxValue.ToString("r");
double d = double.Parse(s); // No exception
Run Code Online (Sandbox Code Playgroud)

如果您无法控制数据,显然没有任何帮助 - 但是您应该明白,在这种情况下您可能会丢失数据.


cod*_*zen 12

问题可能是由于Double.MaxValue转换为字符串的事实,并且当输出字符串时,并非所有数字都被输出,而是被舍入.解析这个值会溢出双倍.

Double.TryParse在失败的情况下使用并随后检查字符串"1.79769313486232E + 308"上的相等性并且替换Double.MaxValue应该是一个快速的解决方法,如果您需要保持字符串的方式.

编辑:当然,如果你不需要保持字符串的方式,使用Round Trip格式说明符首先产生字符串,正如Jon在他的回答中所描述的那样.