Как контролировать количество цифр, которые должны отображаться после символа десятичной точки для двойной переменной?

Я хочу напечатать n количество цифр после запятой при печати числа типа данных double. Однако целое число n должно быть получено от пользователя с помощью scanf().

double pi = acos(-1);
int n;
printf("\nEnter the number of decimal digits required : ");
scanf("%d",&n);

Теперь, как использовать printf() для вывода n десятичных цифр числа пи?


person abhishek    schedule 09.06.2016    source источник
comment
Сгенерировать строку формата через sprintf()?   -  person MikeCAT    schedule 09.06.2016


Ответы (1)


Цитируя C11, глава §7.21.6.1/p4, для параметра precision,

Каждая спецификация преобразования представлена ​​символом %. После % последовательно появляются следующие строки:

  • Необязательная точность, которая дает [...] количество цифр, которые должны появиться после символа десятичной точки для преобразований a, A, e, E, f и F, [...] Точность принимает форму точки (.), за которым следует либо звездочка * (описано ниже), либо необязательное десятичное целое число; [...]

и, в пункте 5,

Как отмечалось выше, ширина поля или точность, или и то и другое, могут быть обозначены звездочкой. В этом случае аргумент int предоставляет ширину или точность поля. Аргументы, определяющие ширину поля или точность, или и то, и другое, должны появляться (в указанном порядке) перед аргументом (если он есть), подлежащим преобразованию. [...]

Таким образом, вы можете использовать формат

printf("%.*f", precision, variable);

как

printf("%.*f", n, pi);

использовать точность n, полученную от пользователя.

person Sourav Ghosh    schedule 09.06.2016