Как выводить числа с плавающей запятой в исходном формате на C ++?

StackOverflow https://stackoverflow.com/questions/1431144

  •  07-07-2019
  •  | 
  •  

Вопрос

Это практика кодирования.Я читаю эти цифры как double из файла:
112233 445566
8717829120000 2.4
16000000 1307674.368
10000 2092278988.8
1234567 890123
После некоторых вычислений я должен вывести некоторые из них.Я хочу, чтобы они выглядели точно так же, как в файле, без заполняющих нулей, без научных обозначений, как я мог бы этого добиться?Должен ли я читать в виде строки, а затем преобразовывать их?

Редактировать: Erm...Do ребята, вы имеете в виду, что на самом деле у программы нет возможности узнать, как цифры выглядят изначально?

Это было полезно?

Решение

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

Почему?Когда имеешь дело с числами с плавающей запятой, компьютер не может точно представить большинство десятичных дробных частей в двоичном виде.Таким образом, в таком числе, как 2.4, внутреннее представление не будет точно таким, как 2.4, оно будет немного отличаться.В большинстве случаев библиотеки ввода-вывода C / C ++ принимают такое двоичное число и выводят 2.4, но для некоторых чисел оно может выводить что-то вроде 2.40000000001 или 2.399999999.

Итак, вот почему вы хотите сохранить исходные строки.

Другие советы

Нет встроенного способа сделать это. Да, вам нужно сохранить исходное представление и некоторую связь между этим представлением и проанализированным номером (например, map<string, double>).

Если вам нужно вывести исходные числа такими, какими они были, лучше хранить где-нибудь исходные строки. Во время десятичной дроби - & Gt; бинарный - > десятичное преобразование, некоторая точность может быть потеряна из-за пределов точности double. Вы можете не печатать точно такие же десятичные цифры.

Вы читаете их в виде строк, записываете все многие тонкие аспекты (есть ли у них десятичные части, как долго, какие-либо дополнения нулями и т. д., и т. д.) и запоминаете все эти аспекты для каждого поля, конвертируйте их в числа, если вам абсолютно необходимо , затем используйте весь сумасшедший аспект, который вы сохранили при повторном форматировании чисел для вывода. Сумасшедший, но единственный способ добиться буквально того, что вы просите.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top