Как вывести числа с плавающей запятой в исходном формате в C ++? - PullRequest
1 голос
/ 16 сентября 2009

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

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

Ответы [ 4 ]

3 голосов
/ 16 сентября 2009

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

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

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

2 голосов
/ 16 сентября 2009

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

2 голосов
/ 16 сентября 2009

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

2 голосов
/ 16 сентября 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...