如何在 printf 格式上参数化 float 的精度
How to parameterize precision of float on printf format
我有一个 C 程序,可以将测量值输出到标准输出。我使用 printf
来显示它们,格式允许我更改精度
printf("Scan=%d S_0=%.5f S_1=%.5f S_2=%.5f S_3=%.5f", scanId, S0, S1, S2, S3);
我的问题是我有很多像这样的打印,如果我想快速更改精度,我必须对每一个进行更改。我想知道是否可以使用 #define
之类的东西将它放在精确的位置,并且它会在编译时应用于每个 printf
。我知道不重新编译是不可能的,但我同意。我知道我在 python 中询问的类似内容是:
f"{s_0:.{prec}f}"
一种方法是像这样 #define
(如您所猜):
#define PFLT "%.5f"
printf("Scan=%d S_0=" PFLT " S_1=" PFLT " S_2=" PFLT " S_3=" PFLT, scanId, S0, S1, S2, S3);
然后要更改精度,您只需更改 #define
并重新编译。
您可以使用 *
符号代替精度,在这种情况下,精度作为参数给出。然后你可以定义一个常量传递给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);
我有一个 C 程序,可以将测量值输出到标准输出。我使用 printf
来显示它们,格式允许我更改精度
printf("Scan=%d S_0=%.5f S_1=%.5f S_2=%.5f S_3=%.5f", scanId, S0, S1, S2, S3);
我的问题是我有很多像这样的打印,如果我想快速更改精度,我必须对每一个进行更改。我想知道是否可以使用 #define
之类的东西将它放在精确的位置,并且它会在编译时应用于每个 printf
。我知道不重新编译是不可能的,但我同意。我知道我在 python 中询问的类似内容是:
f"{s_0:.{prec}f}"
一种方法是像这样 #define
(如您所猜):
#define PFLT "%.5f"
printf("Scan=%d S_0=" PFLT " S_1=" PFLT " S_2=" PFLT " S_3=" PFLT, scanId, S0, S1, S2, S3);
然后要更改精度,您只需更改 #define
并重新编译。
您可以使用 *
符号代替精度,在这种情况下,精度作为参数给出。然后你可以定义一个常量传递给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);