Почему я не могу присвоить двойное одинаковое литеральное значение Double.Min и Max? - PullRequest
0 голосов
/ 06 ноября 2018

Декомпиляция источника и поиск Double.Min и Double.Max показывает следующее определение:

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

Это соответствует странице msdn .

Если я пытаюсь присвоить это максимальное значение переменной вручную, я получаю следующую ошибку:

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

Может кто-нибудь объяснить мне, почему это так? Что-то не так с проверкой двойной границы?

1 Ответ

0 голосов
/ 06 ноября 2018

Это известная ошибка .NET Framework и .NET Core. Поскольку компилятор Roslyn, вероятно, просто использует код синтаксического анализа .NET Framework, компилятор недопустимо отклоняет это двойное значение.

Гарольд указал, что значение округлено. Но если вы округлите его, то он все равно не будет работать.

double.Parse("1.79769313486231E+308")

бросает OverflowException.

Эта проблема GitHub связана со многими другими ошибками синтаксического анализа с плавающей запятой. Мне было удивительно видеть, насколько нарушена эта фундаментальная фреймворк.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...