Как выводить числа с плавающей запятой в исходном формате на C ++?
Вопрос
Это практика кодирования.Я читаю эти цифры как 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. Вы можете не печатать точно такие же десятичные цифры.
Вы читаете их в виде строк, записываете все многие тонкие аспекты (есть ли у них десятичные части, как долго, какие-либо дополнения нулями и т. д., и т. д.) и запоминаете все эти аспекты для каждого поля, конвертируйте их в числа, если вам абсолютно необходимо , затем используйте весь сумасшедший аспект, который вы сохранили при повторном форматировании чисел для вывода. Сумасшедший, но единственный способ добиться буквально того, что вы просите.