Почему 0/0 - это NaN, а 0/0,00 - нет

Используя DataTable.Compute, и создали несколько случаев для тестирования:

dt.Compute("0/0", null); //returns NaN when converted to double

dt.Compute("0/0.00", null); //results in DivideByZero exception

Я изменил свой код для обработки обоих. Но интересно узнать, что здесь происходит?

Ответы

Ответ 1

Я предполагаю, что это происходит потому, что литералы с десятичными точками рассматриваются как System.Decimal и вызывают DivideByZeroException

Согласно MSDN

Целочисленные литералы [+ -]? [0-9] + обрабатываются как System.Int32, System.Int64 или System.Double

Реальные литералы без научной записи, но с десятичной точкой, обрабатываются как System.Decimal. Если число превышает максимальное или минимальные значения, поддерживаемые System.Decimal, затем анализируются как System.Double.

Согласно DivideByZeroException

Исключение, которое выдается при попытке разделить целое или десятичное значение от нуля.

Для System.Double он возвращает Nan, потому что, если операция является делением и константы являются целыми числами, она изменяется на двойной тип результата, согласно справочному источнику (спасибо @steve16351 за хороший результат)