c - Printf 用于 c 中的浮点数
问题描述
我实际上是在尝试使用 atmel std 在 c 中打印一个浮点数,而不是打印 value ,它只给了我“f”。有谁知道为什么会这样?
代码 :
float dist = 2.0*3.14*0.25*count;
printf("counter : %d\n",count);
printf("dist : %f\n", dist);
所以,计数器实际上是一个 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” 这是编译器输出
对此进行了测试,但没有奏效:
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
如果代码输出浮点数,一些工具链会尝试自动链接一个全功能版本,如果不输出浮点数,则自动链接一个最小版本,但一些工具链要求用户手动选择printf
要使用的版本。
请注意,如果代码空间有任何问题,请使用以下结构:
/* 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
库,同时使用的代码空间比该库消耗的要少得多。
推荐阅读
- python - json对python变量的响应
- bash - How to get first and second part of a string in bash on last occurrence of a delimiter
- r - 从连续字符串格式的日期列中提取“年”、“月”和“日”
- reactjs - 函数是否不会根据调用方式更新 React 钩子(尤其是 useState)?
- html - 如何将包含 html 标签的网页复制到 Fluter 应用程序?
- java - JAVAFX 如何在更改后更新复选框取消选择?
- unity3d - 如何为统一设置 Firebase 远程配置?
- typescript - 在 TypeScript 中,可选参数和未定义参数之间有区别吗?
- laravel - 跨所有 URL 传递请求参数
- python - 无法在 Discord.py 中获取 addrole 命令