为什么我不能为 Double.Min 和 Max 分配一个相同字面值的两倍?

Why can't I assign a double the same literal value of Double.Min and Max?

反编译源代码并查找Double.MinDouble.Max显示如下定义:

public const double MinValue = -1.79769313486232E+308;
public const double MaxValue = 1.79769313486232E+308;

这与 msdn page 匹配。

如果我尝试将这个最大值手动分配给一个变量,我会收到以下错误:

Floating-point constant is outside the range of type 'double'
double d1 = -1.79769313486232E+308; // DOESN'T COMPILE
Double d2 = 1.79769313486232E+308; // DOESN'T COMPILE

谁能给我解释一下这是为什么?双边界验证有问题吗?

This is a known .NET Framework and .NET Core bug. 由于 Roslyn 编译器可能只使用 .NET Framework 解析代码,因此编译器无效地拒绝了这个双精度值。

harold 指出该值是四舍五入的。但是如果你把它四舍五入,它仍然不起作用。

double.Parse("1.79769313486231E+308")

抛出 OverflowException

这个 GitHub 问题链接指向许多其他浮点解析错误。看到这个基本框架功能如此糟糕,我感到很惊讶。