29

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

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

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

“%8.2f”

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

像这样的东西:

sprintf(mystr, "%d %f", numberofdecimals, floatnumbervalue)
4

3 回答 3

53

您也可以使用".*"浮点数,另请参阅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);

输出:

42.35
于 2013-05-07T07:36:41.437 回答
31

您也可以使用星号来表示字段宽度和精度:

printf("%*.*f\n", myFieldWidth, myPrecision, myFloatValue);

参见例如this reference

于 2013-05-07T07:36:19.197 回答
0

如果由于某种原因,您的实际 C 库不支持浮点格式的可变精度和宽度,那么构建您自己的格式字符串并不难:

char fmt[6 + 3*(sizeof width + sizeof precision)]; /* sufficient space */
sprintf(fmt, "%%%d.%df\n", width, precision);
printf(fmt, value);

当然,这是有代价的,但是 - 根据您的情况 - 这可能是集中式的。

于 2021-01-12T08:43:42.637 回答