C # .NET Двойная проблема ... 6.8! = 6,8?
-
29-09-2019 - |
Вопрос
Я делал тестирование подразделения на работе, и для одной из утверждений выскочила. Обратите внимание, что ожидаемые значения и фактические значения являются удваивающими.
Assert.AreEqual(expectedValue, actualValue);
Исключение заявило, что они не были равны, разрабатывая, что «ожидаемое значение: <6.8> Фактическое значение: <6.8>».
Ожидаемое значение - это жесткое кодированное 6.8, и фактическое значение сформулировано с использованием значений баз данных, проходящих через нашу классификацию методов (таких как равные записи, или натуральные перерывы Jenks).
Я предполагаю, что разница, вероятно, в том, что Mantisss из 2 значений аналогичны до наименее значимого бита. Я обновил тесты, чтобы включить эпсилон, чтобы найти, если два значения достаточно близко, но мне интересно, если есть способ заставить Mantissa соответствовать со значением отображения, если я отображал, что двойной. Существует ли такая коррекция мантиссы?
Решение
Я не совсем уверен, что вы имеете в виду, принудив Mantissa подбирать значение отображения ... находятся Нет двойных значений, которые именно 0,1, например.
Если вы хотите, чтобы какой-то код отобразить точный ценность двойного, однако, у меня есть DoubleConverter.cs. Файл, который делает его легко:
double d = 0.1;
string x = DoubleConverter.ToExactString(d);
Другая альтернатива - использовать спецификатор формата кругового пути («R») при преобразовании двойного в строку - это гарантирует, что результат имеет достаточно информации для воспроизведения того же точного значения позже. Другими словами, если x != y
, потом x.ToString("r") != y.ToString("r")
.
Другие советы
Вы можете преобразовать как в строку: actualValue.ToString("0.000")
и сравните те строки.
Это может быть сделано, чтобы соответствовать вашим требованиям.
Если вы хотите проверить, соответствует ли значения отображения по умолчанию, просто сравните значения отображения по умолчанию:
Assert.AreEqual(expectedValue.ToString(), actualValue.ToString());