Два десятичных знака с использованием printf () - PullRequest
56 голосов
/ 24 января 2011

Я пытаюсь записать число в два десятичных знака, используя printf() следующим образом:

#include <cstdio>
int main()
{
  printf("When this number: %d is assigned to 2 dp, it will be: 2%f ", 94.9456, 94.9456);
  return 0;
}

Когда я запускаю программу, я получаю следующий вывод:

# ./printf
When this number: -1243822529 is assigned to 2 db, it will be: 2-0.000000

Почему это так?

Спасибо.

Ответы [ 4 ]

116 голосов
/ 24 января 2011

То, что вы хотите, это %.2f, а не 2%f.

Кроме того, вы можете заменить %d на %f;)

#include <cstdio>
int main()
{
printf("When this number: %f is assigned to 2 dp, it will be: %.2f ", 94.9456, 94.9456);
return 0;
}

Будет выведено:

Когда этот номер: 94,945600 назначен на 2 дп, он будет: 94,95

Смотрите здесь полное описание параметров форматирования printf: printf

6 голосов
/ 24 января 2011

Использование: "%.2f" или его варианты.

См. Спецификацию POSIX для достоверной спецификации строк формата printf().Обратите внимание, что он отделяет дополнения POSIX от базовой спецификации C99.Есть некоторые сайты на C ++, которые появляются в поиске Google, но некоторые, по крайней мере, имеют сомнительную репутацию, судя по комментариям, увиденным в других местах на SO.

Поскольку вы пишете код на C ++, вам, вероятно, следует избегать printf() и его родственники.

4 голосов
/ 24 января 2011

Для части %d см. Как работает эта программа? , а для десятичных знаков используйте %.2f

0 голосов
/ 30 июля 2011

Попробуйте использовать такой формат, как% d.% 02d

int iAmount = 10050;
printf("The number with fake decimal point is %d.%02d", iAmount/100, iAmount%100);

Другой подход - набрать приведение к двойному типу перед печатью, используя% f, например:

printf("The number with fake decimal point is %0.2f", (double)(iAmount)/100);

Мои 2 цента:)

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