Home > OS >  How to parameterize precision of float on printf format
How to parameterize precision of float on printf format

Time:02-10

I have a C program that output values to stdout from measure. I use printf to display them and the format allows me to change the precision

 printf("Scan=%d S_0=%.5f S_1=%.5f S_2=%.5f S_3=%.5f", scanId, S0, S1, S2, S3);

My issue is that I have a lot of printing like this one and if I want to change the precision quickly I have to get on each one and change it. I was wondering if it was possible to use something like a #define to have it on a precise location and it will apply on each printf at compilation. I know it is not possible easily without recompile but I'm ok with that. I know something similar as I ask here in python is:

f"{s_0:.{prec}f}"

CodePudding user response:

One way would be to do a #define (as you guessed) like this:

#define PFLT "%.5f"

printf("Scan=%d S_0=" PFLT " S_1=" PFLT " S_2=" PFLT " S_3=" PFLT, scanId, S0, S1, S2, S3);

Then to change the precision you just need to alter the #define and recompile.

CodePudding user response:

You can use a * symbol in place of the precision, in which case the precision is given as a parameter. Then you can define a constant to pass to printf.

#define P_FLOAT 5

printf("Scan=%d S_0=%.*f S_1=%.*f S_2=%.*f S_3=%.*f", 
       scanId, P_FLOAT, S0, P_FLOAT, S1, P_FLOAT, S2, P_FLOAT, S3);
  • Related