Как мне отформатировать вывод в C? - PullRequest
1 голос
/ 11 февраля 2010

У меня есть этот код для школьного задания, но я не могу его отформатировать. Когда я запускаю программу, я получаю 1.27768e-307.

lp-> цена удваивается со значением 1000000.0000000000

printf("Price of flat: %g\n", lp->price); 

Есть идеи? Остальные двойные значения форматируются правильно, но не цена.

Ответы [ 4 ]

8 голосов
/ 11 февраля 2010

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

Тогда попробуйте:

printf("Price: %6f\n", lp->price);

Спецификатор %f не использует научную запись.

2 голосов
/ 11 февраля 2010

(1) Поскольку вы используете double, вам следует добавить спецификатор длины l:

Это не правда. Спецификатор длины l не используется в% e,% f или% g; эти преобразования в любом случае удваиваются. (Используйте спецификатор длины L, чтобы взять длинный дубль.)

Поскольку printf - это функция varargs, если вы передадите ей значение с плавающей запятой, она автоматически увеличит его в два раза.

0 голосов
/ 11 февраля 2010

Убедитесь, что ваш lp->price действительно double, а не указатель на что-то (double*) или массив чего-то (double[]).

0 голосов
/ 11 февраля 2010

%g напечатает ваш двойной в нормальном или экспоненциальном формате.%f для случаев, когда вы всегда хотите его в десятичной записи.

См. Также http://en.wikipedia.org/wiki/Printf#printf_format_placeholders и http://man.cx/printf%283%29

- {edit: я удалил этот ответ как другойуже было дано, но я понимаю, что упоминание того, что делает% g, было бы полезно}

...