printf浮点数的可变小数位数

Win*_*Too 22 c printf

我找到了有趣的格式来打印非终止的固定长度字符串,如下所示:

char newstr[40] = {0};
sprintf(newstr,"%.*s",  sizeof(mystr), mystr);
Run Code Online (Sandbox Code Playgroud)

所以我想也许在printf命令下有一种打印浮点数的方法......

"%8.2f"

能够选择整数的小数位数.

像这样的东西:

sprintf(mystr, "%d %f", numberofdecimals, floatnumbervalue)
Run Code Online (Sandbox Code Playgroud)

编辑 - 解决方案:(
用于将浮点数舍入和清除到所需精度).

int precision = 2;  
char kolf[16] = {0};  
sprintf(kolf, "%8.*f", precision, mystruct.myfloat);  
float kol = atof(kolf);  
Run Code Online (Sandbox Code Playgroud)

And*_*ter 40

您也可以使用".*"浮点,另请参阅http://www.cplusplus.com/reference/cstdio/printf/(指C++,但格式说明符类似)

.nu​​mber:对于a,A,e,E,f和F说明符:这是小数点后要打印的位数(默认情况下,这是6).

...

.*:格式字符串中未指定精度,但作为必须格式化的参数前面的附加整数值参数.

例如:

float floatnumbervalue = 42.3456;
int numberofdecimals = 2;
printf("%.*f", numberofdecimals, floatnumbervalue);
Run Code Online (Sandbox Code Playgroud)

输出:

42.35
Run Code Online (Sandbox Code Playgroud)


Som*_*ude 22

对于字段宽度和精度,您也可以使用星号:

printf("%*.*f\n", myFieldWidth, myPrecision, myFloatValue);
Run Code Online (Sandbox Code Playgroud)

参见例如此参考文献.