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