我找到了有趣的格式来打印非终止的固定长度字符串,如下所示:
char newstr[40] = {0};
sprintf(newstr,"%.*s", sizeof(mystr), mystr);
所以我想也许在printf命令下有一种打印浮点数的方法......
“%8.2f”
能够选择带整数的小数位数。
这样的事情:
sprintf(mystr, "%d %f", numberofdecimals, floatnumbervalue)
编辑 - 解决方案:
(用于将浮点数舍入和清除到所需精度)。
int precision = 2;
char kolf[16] = {0};
sprintf(kolf, "%8.*f", precision, mystruct.myfloat);
float kol = atof(kolf);
答案 0 :(得分:37)
您也可以将".*"
与浮点一起使用,另请参阅http://www.cplusplus.com/reference/cstdio/printf/(指C ++,但格式说明符类似)
.number :对于a,A,e,E,f和F说明符:这是要指的位数 在小数点后打印(默认情况下,这是6)。
...
。* :未在格式字符串中指定精度,但是作为 必须的参数前面的附加整数值参数 格式化。
例如:
float floatnumbervalue = 42.3456;
int numberofdecimals = 2;
printf("%.*f", numberofdecimals, floatnumbervalue);
输出:
42.35
答案 1 :(得分:19)
答案 2 :(得分:0)
如果由于某种原因,您的实际 C 库不支持浮点格式的可变精度和宽度,那么构建您自己的格式字符串并不难:
char fmt[6 + 3*(sizeof width + sizeof precision)]; /* sufficient space */
sprintf(fmt, "%%%d.%df\n", width, precision);
printf(fmt, value);
当然这是有代价的,但是 - 根据您的情况 - 这可能是集中的。