Как определяется количество цифр в преобразовании с плавающей запятой в строку? - PullRequest
0 голосов
/ 21 июня 2019

У меня есть проблема GitHub , требующая усечения ошибок округления при преобразовании значения с плавающей запятой в строку. Выдержка:

System.Quadruple quad = 5.099;
Console.WriteLine(quad);

выходы:

5.099000000000000198951966012828052

Я мог бы догадаться о наивной реализации, но я предполагаю, что есть какой-то согласованный способ решить, сколько цифр должно отображаться. Какой алгоритм? Код, о котором идет речь .

1 Ответ

0 голосов
/ 21 июня 2019

@ Брент: Мой комментарий выше может быть (частью) вашего ответа (я читаю проблему как запоздалую мысль - извинения).Проблема csprogrammer001 в том, что он (а) не оценил последствия повышения от двойного до четверного.Между двойными 5.099 (... ~ 12digits ...) 0 и двойными 5.099 (... ~ 12digits ...) 1 лежат еще ~ 999 ... 9 (17 десятичных 9с) действительных квадраторских значений.

Чтобы приблизиться, они должны сделать что-то вроде Quad.Parse ("5.09900000000000000000000000000000") или явно обрезать вашу строку, чтобы она соответствовала их значащим цифрам.

Если при вставке двойного значения в квад (неназначенные биты ноль) получается почти как черт 5.09900000000000019895196601282 (8052), то это то, что вы должны отрендерить (не менее 30 десятичных цифр на основе .Net по умолчанию 15),Единственное, что вы могли бы подумать, чтобы «исправить» пример, это «угадать намерение» с помощью чего-то вроде double-> round-> string-> pad-> quad, и вы НЕ хотите этого делать.

Параметры форматирования для вашей ToString () были бы хорошим дополнением.

...