【发布时间】:2015-11-06 21:49:29
【问题描述】:
所以我在LinqPad 中闲逛并注意到一些奇怪的事情,我在 Visual Studio 测试代码单元测试中得到了相同的结果。
我正在为数字数据类型使用所有不同的 TryParse。在此期间,我注意到 double.TryParse 的行为与其他的有点不同。
例如:
var doubleStr = double.MinValue.ToString();
//doubleStr = -1.79769313486232E+308
double result;
var result = double.TryParse(doubleStr, out result);
//result is returning false
所有其他具有 MinValue 的数据类型都没有这个问题:
var floatStr = float.MinValue.ToString();
//floatStr = -3.402823E+38
float result2;
float.TryParse(floatStr, out result2);
//result = True
任何人都知道为什么 double 是唯一一个将其 MinValue 属性的字符串版本解析回实际 double 的 false 吗?
我不明白为什么这会有所不同。也许我错过了什么。
【问题讨论】:
-
很确定这与 .ToString() 的指数符号有关,导致它丢失一些数字。
-
看看 doubleStr 和 floatStr 值会很有趣。
-
MinValue 作为字符串 (-1.79769313486232E+308) 失败。将最后一个小数点改为 1 (-1.79769313486231E+308) 并成功。可能是介于两者之间的某个转折点。
-
@JamesR。用这些值更新。
标签: c# .net double visual-studio-2015 linqpad