Как вывести двойное значение со всеми десятичными разрядами в отладчике или консоли - PullRequest
3 голосов
/ 19 января 2011

Я хочу полностью извлечь значение double при отладке приложения, чтобы я мог использовать его для создания тестового примера, который будет использоваться в моем алгоритме геометрии.

Как извлечь значение double из числа вплоть до самых последних десятичных разрядов, допустимых для типов данных double в C #, и вывести его в окнах отладчика или с помощью команды Console.WriteLine?1007 *

Редактировать: Моя проблема в том, что алгоритм, который принимает двойное значение в качестве входных данных, потерпит неудачу, только если я настаиваю на вводе всего двойного значения, вплоть до самой последней цифры.И поскольку я хочу воспроизвести его в тестовом примере, мне нужно такое полное представление двойного значения.

Ответы [ 2 ]

2 голосов
/ 19 января 2011

У меня есть класс DoubleConverter , который делает точно , что вы хотите, по звукам этого.Используйте это следующим образом:

string text = DoubleConverter.ToExactString(doubleValue);

Вам нужно убедиться, что вы понимаете это только потому, что вывод имеет большое количество цифр, но это не значит, что он имеет такую ​​большую точность .Возможно, вы захотите прочитать мою статью о двоичной переменной с плавающей запятой в .NET для получения дополнительной информации - или вы, возможно, будете в курсе всего этого, чтобы начать, конечно.требуется только строковое значение, которое может быть округлено, вам не требуется никакого дополнительного кода - просто используйте спецификатор формата "r":

string text = doubleValue.ToString("r");

Я согласен с общим подходом Джексона Поупа использовать допуск вСравнения на равенство для тестов, но иногда полезно увидеть точное значение, представленное двойным.Это может помочь понять, почему тот или иной расчет так или иначе получился.

1 голос
/ 19 января 2011

Вместо того чтобы пытаться вывести двоичное число в виде десятичного числа для очень большого числа десятичных разрядов и выполнить точное сравнение, вместо этого сделайте сравнение со значением epsilon, которое является допустимой ошибкой, и задайте для epsilon очень маленькое значение.Например,

 double epsilon = Math.Abs(actual - expected);
 Assert.That(epsilon, Is.LessThan(0.000000000001);
...