【问题标题】:Printf variable number of decimals in floatPrintf 可变小数位数
【发布时间】:2022-11-18 08:35:07
【问题描述】:

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

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

所以我想也许在 printf 命令下有办法打印浮点数......

“%8.2f”

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

是这样的:

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

【问题讨论】:

  • 删除:编辑 - 解决方案:(用于将浮点数舍入和清除到所需精度)。 c int precision = 2; char kolf[16] = {0}; sprintf(kolf, "%8.*f", precision, mystruct.myfloat); float kol = atof(kolf);

标签: c printf


【解决方案1】:

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

。数字:对于 a、A、e、E、f 和 F 说明符:这是要显示的位数 在小数点后打印(默认情况下,这是 6)。

...

.*: 精度没有在格式字符串中指定,而是作为 在必须的参数之前的附加整数值参数 被格式化。

例如:

float floatnumbervalue = 42.3456;
int numberofdecimals = 2;
printf("%.*f", numberofdecimals, floatnumbervalue);

输出:

42.35

【讨论】:

    【解决方案2】:

    您也可以为字段宽度和精度使用星号:

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

    参见例如this reference

    【讨论】:

    • 谢谢 Joach,这就是我要寻找的。
    • +1 指向 en.cppreference.com 的“C”部分的链接 - 已添加书签 :)
    【解决方案3】:

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

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

    当然这是有代价的,但是——根据你的情况——这可能是集中的。

    【讨论】:

      猜你喜欢
      • 2013-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-07
      • 1970-01-01
      • 2011-06-14
      相关资源
      最近更新 更多