打印
[STM32F1]

float型如何转化为字符型

[复制链接]
楼主: Cjy_JDxy
手机看帖
扫描二维码
随时随地手机跟帖
21
qinlu123| | 2017-9-26 16:07 | 只看该作者 回帖奖励 |倒序浏览
我一直用sprintf函数。

使用特权

评论回复
22
Cjy_JDxy|  楼主 | 2017-9-26 16:21 | 只看该作者
m114714336 发表于 2017-9-26 16:02
上面是我做过的一个仪器仪表 显示测量值,浮点型显示,显示几位小数,显示值总共占几位,sprintf函数都可以 ...

float Water_Flow_Now;
我分别用sprinntf打印格式%s,%f,%d,%ld,都不对,截图如下。










使用特权

评论回复
23
IICeeprom| | 2017-9-26 16:39 | 只看该作者
还有啊,楼上的难道都没注意到iota这个关键词吗?难道没有笔误?

使用特权

评论回复
24
m114714336| | 2017-9-26 16:46 | 只看该作者
本帖最后由 m114714336 于 2017-9-26 16:54 编辑
Cjy_JDxy 发表于 2017-9-26 16:21
float Water_Flow_Now;
我分别用sprinntf打印格式%s,%f,%d,%ld,都不对,截图如下。

亲  你好像sprintf的用法 你还没 明白sprintf函数中间的“%d” %后面的格式 是跟你要转换的数的格式要保持一致的 不是你随便%s  %f  %d如果 你定义float Water_Flow_Now=123.45;  这是个浮点型数据 你要完整转换字符串 就是 sprintf(str,"%6.2f",Water_Flow_Now)  其中"%6.3f"的6是你字符串的长度包含小数点在内一起6位,"%6.2f"中的2是你要显示两位小数,"%6.3f"中的f是要和你定义的Water_Flow_Now类型保持一致的  不是你随便弄的%d %s



使用特权

评论回复
25
一路向北lm| | 2017-9-26 16:50 | 只看该作者
使用sprintf 规格化一下即可,keil5可以啊,可以包含C++的头文件。

使用特权

评论回复
26
sonicll| | 2017-9-26 17:01 | 只看该作者
楼主这问题是自己没弄明白sprintf的用法啊,冤枉了keil5

使用特权

评论回复
27
Cjy_JDxy|  楼主 | 2017-9-26 17:03 | 只看该作者
一路向北lm 发表于 2017-9-26 16:50
使用sprintf 规格化一下即可,keil5可以啊,可以包含C++的头文件。

请问怎么规格化?包含C++的哪个头文件?

使用特权

评论回复
28
Cjy_JDxy|  楼主 | 2017-9-26 17:04 | 只看该作者
m114714336 发表于 2017-9-26 16:46
亲  你好像sprintf的用法 你还没 明白sprintf函数中间的“%d” %后面的格式 是跟你要转换的数的格式要保持 ...

谢谢!



这样还是不对。

使用特权

评论回复
29
m114714336| | 2017-9-26 17:08 | 只看该作者
Cjy_JDxy 发表于 2017-9-26 16:21
float Water_Flow_Now;
我分别用sprinntf打印格式%s,%f,%d,%ld,都不对,截图如下。




注意  sprintf函数是会做4舍5入处理的

使用特权

评论回复
30
一路向北lm| | 2017-9-26 17:13 | 只看该作者
Cjy_JDxy 发表于 2017-9-26 17:03
请问怎么规格化?包含C++的哪个头文件?

可以参考下这个 http://bbs.**/jishu_564684_1_6.html

使用特权

评论回复
31
m114714336| | 2017-9-26 17:15 | 只看该作者

那就不知道是不是你仿真出了问题哦

使用特权

评论回复
32
m114714336| | 2017-9-26 17:17 | 只看该作者

你是不是其他地方或中断里面对Water_Flow_Now进行赋值了

使用特权

评论回复
33
Cjy_JDxy|  楼主 | 2017-9-26 17:22 | 只看该作者
m114714336 发表于 2017-9-26 17:08
注意  sprintf函数是会做4舍5入处理的








不是四舍五入啊,直接就是0啊。我用的keil5.21。你用的是KEIL4还是5啊?难道是人品问题吗?

使用特权

评论回复
34
Cjy_JDxy|  楼主 | 2017-9-26 17:23 | 只看该作者
m114714336 发表于 2017-9-26 17:17
你是不是其他地方或中断里面对Water_Flow_Now进行赋值了

没有

使用特权

评论回复
35
前功尽弃| | 2017-9-26 17:23 | 只看该作者
你把float型的数字每一位上的数值提取出来存放到char类型中的变量,根据变量不就可以点亮数码管了

使用特权

评论回复
36
Cjy_JDxy|  楼主 | 2017-9-26 17:24 | 只看该作者
IICeeprom 发表于 2017-9-26 16:39
还有啊,楼上的难道都没注意到iota这个关键词吗?难道没有笔误?

没有笔误

使用特权

评论回复
37
Cjy_JDxy|  楼主 | 2017-9-26 17:25 | 只看该作者
一路向北lm 发表于 2017-9-26 17:13
可以参考下这个 http://bbs.**/jishu_564684_1_6.html

你的网址有两个星号**

使用特权

评论回复
38
m114714336| | 2017-9-26 17:31 | 只看该作者
Cjy_JDxy 发表于 2017-9-26 17:22
不是四舍五入啊,直接就是0啊。我用的keil5.21。你用的是KEIL4还是5啊?难道是人品问题吗?

...

用的keil5啊

使用特权

评论回复
39
LeCreateStudio| | 2017-9-26 20:57 | 只看该作者
*10  *100 *1000变成整形再处理 即可

使用特权

评论回复
40
linqing171| | 2017-9-26 21:09 | 只看该作者
keil for arm的库太标准了。
keil c51的限制多点。
keil c51中的帮助中的CX51 Compiler User's Guide 文件中的,Library refrence 章节的,Reference子章节的,sprintf函数的,帮助中的例子:

#include <stdio.h>

void tst_sprintf (void) {
  char buf [100];
  int n;
  int a,b;
  float pi;

  a = 123;
  b = 456;
  pi = 3.14159;

  n = sprintf (buf, "%f\n", 1.1);
  n += sprintf (buf+n, "%d\n", a);
  n += sprintf (buf+n, "%d %s %g", b, "---", pi);

  puts (buf);
}

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则