2015-06-23 2 views
6

Использование Sprintf и общий синтаксис "%A.B" я могу это сделать:Установить точность динамически с помощью Sprintf

double a = 0.0000005l; 
char myNumber[50]; 
sprintf(myNumber,"%.2lf",a); 

Могу ли я установить А и B динамически в строке формата?

+1

Да, вы можете, например, см [эта ссылка 'printf' (и family)] (http://en.cppreference.com/w/c/io/fprintf). –

+1

В качестве альтернативы, сама строка формата также может быть создана с помощью другого вызова sprintf. – Lundin

ответ

9

Да, вы можете это сделать. Вам необходимо использовать звездочку * как ширину поля и .* как точность. Затем вам нужно предоставить аргументы, несущие значения. Что-то вроде

sprintf(myNumber,"%*.*lf",A,B,a); 

Примечание: A и B должны быть типа int. От стандарта C11, глава §7.21.6.1, fprintf() функция

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

Смежные вопросы