Using sprintf and the general syntax "%A.B"
I can do this:
double a = 0.0000005l;
char myNumber[50];
sprintf(myNumber,"%.2lf",a);
Can I set A and B dynamically in the format string?
Yes, you can do that. You need to use an asterisk *
as the field width and .*
as the precision. Then, you need to supply the arguments carrying the values. Something like
sprintf(myNumber,"%*.*lf",A,B,a);
Note: A
and B
need to be type int
. From the C11
standard, chapter §7.21.6.1, fprintf()
function
... a field width, or precision, or both, may be indicated by an asterisk. In this case, an
int
argument supplies the field width or precision. The arguments specifying field width, or precision, or both, shall appear (in that order) before the argument (if any) to be converted. A negative field width argument is taken as a-
flag followed by a positive field width. A negative precision argument is taken as if the precision were omitted.
Yes - You use "*" e.g.
sprintf(mynumber, "%.*lf", 2, a);
See http://linux.die.net/man/3/sprintf
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With