Tob*_*rth 4 c# double literals
反编译源并查找Double.Min
并Double.Max
显示以下定义:
public const double MinValue = -1.79769313486232E+308;
public const double MaxValue = 1.79769313486232E+308;
Run Code Online (Sandbox Code Playgroud)
这与msdn页面匹配.
如果我尝试手动将此最大值分配给变量,则会出现以下错误:
Floating-point constant is outside the range of type 'double'
Run Code Online (Sandbox Code Playgroud)
double d1 = -1.79769313486232E+308; // DOESN'T COMPILE
Double d2 = 1.79769313486232E+308; // DOESN'T COMPILE
Run Code Online (Sandbox Code Playgroud)
有人能解释一下为什么会这样吗?双边界验证有问题吗?
这是一个已知的.NET Framework和.NET Core错误.由于Roslyn编译器可能只使用.NET Framework解析代码,因此编译器会无效地拒绝此double值.
哈罗德指出,价值是四舍五入的.但是,如果你将它四舍五入,那么它仍然无效.
double.Parse("1.79769313486231E+308")
Run Code Online (Sandbox Code Playgroud)
抛出一个OverflowException
.
此GitHub问题链接到许多其他浮点解析错误.令我惊讶的是,看到这个基本框架功能有多么破碎.