locked
Почему не работает Double.Parse(Double.MaxValue.ToString())? RRS feed

  • Общие обсуждения

  • System.Double и System.Single неточно отображаются в десятичном виде, поскольку внутренне являются двоичными числами с плавающей точкой. В силу этого, после определенного количества значащих цифр, десятичное представление числа становится приблизительным. Таким образом, нет гарантии, что в стандартных методах Double.ToString() и Single.ToString() обратное преобразование приведет к тому же значению, если вызваны Parse или TryParse.

    Существует вариант форматирования «r», при котором Double.ToString("r") выдаст десятичное представление числа соответствующее исходному значению, что и требуется. Такой вызов происходит медленнее из-за дополнительной работы, необходимой для учета приближений, произведенных во время синтаксической проверки.

    Причина, по которой Double не может вывести свои минимальное и максимальное значения, а Single может, заключается в том, что числа типа Double округляются в таком направлении, что максимальное и минимальное значения превращаются в числа несколько более удаленные от нуля, то есть в такие, которые не соответствуют типу Double. Числа типа Single округляется в противоположном направлении.

    С этой проблемой часто сталкиваются специалисты по контролю качества, пытающиеся протестировать полный диапазон значений для типа, принимающего значения Double. Подобное поведение очень раздражает, и сейчас обдумывается возможность реализации запроса о том, чтобы сделать текстовые формы минимального и максимального значений при проверке особым случаем.


    Для связи [Mail]
    • Перемещено Tagore Bandlamudi 3 октября 2010 г. 1:06 MSDN Forums consolidation (От:Форум по .NET Framework)
    18 февраля 2010 г. 10:47
    Модератор