Динамически задавать точность с помощью sprintf
использование sprintf и общего синтаксиса "%A.B"
Я могу сделать это:
double a = 0.0000005l;
char myNumber[50];
sprintf(myNumber,"%.2lf",a);
могу ли я установить A и B динамически в строке формата?
2 ответов
Да, вы можете сделать это. Вам нужно использовать звездочку *
в поле "ширина" и .*
как точность. Затем вам нужно предоставить аргументы, несущие значения. Что-то вроде
sprintf(myNumber,"%*.*lf",A,B,a);
Примечание: A
и B
должен быть тип int
. От C11
стандартные, §глава 7.21.6.1, fprintf()
функции
... ширина поля, или точность, или и то и другое могут быть обозначены звездочкой. В это дело, Ан
int
аргумент предоставляет ширину или точность поля. Аргументы, указывающие ширину поля, или точность, или и то и другое, должны отображаться (в этом порядке) перед аргументом (если таковой имеется) для преобразования. Отрицательный аргумент ширины поля берется как-
флаг, за которым следует положительная ширина поля. Аргумент с отрицательной точностью принимается так, как если бы точность была опущена.