Как преобразовать число float в двойное без добавления дополнительных цифр?C#

Место общения программистов C#
Anonymous
Как преобразовать число float в двойное без добавления дополнительных цифр?

Сообщение Anonymous »

Я столкнулся с интересной проблемой: когда я конвертирую значение float -99.9f в переменную типа double, значение этой переменной равно -99.9000015258789
Поэтому этот модульный тест завершается неудачно:

Код: Выделить всё

float f = -99.9f;
double d = (double)f;
Assert.AreEqual(-99.9, d);
Я понимаю, что в разных местах добавляются дополнительные 32 бита. Тем не менее, значение, которое мне нужно, -99,9000000000000, прекрасно представляется как двойное, если я присваиваю его напрямую, о чем свидетельствует этот модульный тест:

Код: Выделить всё

double d2 = -99.9;
Assert.AreEqual(-99.9, d2);
Assert.AreEqual(-99.9000000000000, d2);
Итак, мой главный вопрос: можно ли взять -99,9f и преобразовать его в двойной так, чтобы он действительно был равен -99,9000000000000?

РЕДАКТИРОВАТЬ

Я нашел обходной путь, который на данный момент, кажется, хорошо работает для моего конкретного приложения (то есть тот, где я заранее не знаю, до скольких цифр точности округлять число с плавающей запятой):

Код: Выделить всё

float f = -99.9f;
double d = double.Parse(f.ToString("r"));
Assert.AreEqual(-99.9, d);
Я не уверен, что это сработает во всех случаях; комментарии приветствуются

EDIT 2
Согласно приведенному ниже ответу Лассе В. Карлсена, решением было использовать MSTest, эквивалентный методу AreEqual:

Код: Выделить всё

Assert.AreEqual(-99.9, d, 0.00001);
Обратите внимание: если бы я добавил к этому значению дельты еще один ноль, тест не пройден

Вернуться в «C#»