Динамически задавать точность с помощью 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 аргумент предоставляет ширину или точность поля. Аргументы, указывающие ширину поля, или точность, или и то и другое, должны отображаться (в этом порядке) перед аргументом (если таковой имеется) для преобразования. Отрицательный аргумент ширины поля берется как - флаг, за которым следует положительная ширина поля. Аргумент с отрицательной точностью принимается так, как если бы точность была опущена.


Да-вы используете "*", например

sprintf(mynumber, "%.*lf", 2, a);

см.http://linux.die.net/man/3/sprintf