printf for float in c

Printf for float in c

我实际上是在尝试使用 atmel std 在 c 中打印一个浮点数,而不是打印值,它只给我 "f"。有谁知道为什么会这样吗?

代码:

  float dist = 2.0*3.14*0.25*count;

  printf("counter : %d\n",count);
  printf("dist : %f\n", dist);

所以,counter 实际上是一个 volatile long,它在我的硬件上点击一个按钮后更新,认为它在工作,它的打印是正确的,但是 dist 的打印不正确,它给了我这个:

dist : f
counter : 12
dist : f
counter : 12
dist : f
counter : 12
dist : f
counter : 12
dist : f
counter : 12
dist : f

即使我尝试像这样打印 0.25:

printf("%f\n",0.25);

它给了我输出 "f" here 's the compiler output

对此进行了测试,但没有成功:

    char b[10];

    uint32_t dist = b_radious*counter*M_PI*2.0f;

    dist = (dist + 1) >> 1;

    unsigned units = dist/1000;
    unsigned fraction = dist - (dist*1000);

    sprintf(b, "%4u.%03u", units, fraction);

为了 printf 支持浮点输出,它需要包含相当大量(数千字节)的代码,这对于许多使用 printf 但不使用的应用程序来说是完全无用的不要用它来输出浮点数。如果代码输出浮点数,一些工具链将尝试在 printf 的全功能版本中自动 link,如果不输出浮点数,则尝试自动 link,但一些工具链要求用户手动 select 使用哪个版本的 printf

请注意,如果代码 space 有任何问题,请使用如下结构:

/* Output a number from 0.000 to 9999.000 */
uint32_t xi = x*2000.0f;
xi = (xi+1) >> 1; // Round value without extra floating-point math
unsigned units = xi/1000;
unsigned frac = xi - (units*1000);
sprintf(out, "%4u.%03u", units, frac);

并且避免使用浮点格式 printf 可以避免使用更大的 printf 库,同时使用比该库消耗的代码少得多 space .