[STM32F1] float型如何转化为字符型

[复制链接]
9120|70
qinlu123 发表于 2017-9-26 16:07 | 显示全部楼层
我一直用sprintf函数。
 楼主| Cjy_JDxy 发表于 2017-9-26 16:21 | 显示全部楼层
m114714336 发表于 2017-9-26 16:02
上面是我做过的一个仪器仪表 显示测量值,浮点型显示,显示几位小数,显示值总共占几位,sprintf函数都可以 ...

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

2.png
3.png
4.png





IICeeprom 发表于 2017-9-26 16:39 | 显示全部楼层
还有啊,楼上的难道都没注意到iota这个关键词吗?难道没有笔误?
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



一路向北lm 发表于 2017-9-26 16:50 | 显示全部楼层
使用sprintf 规格化一下即可,keil5可以啊,可以包含C++的头文件。
sonicll 发表于 2017-9-26 17:01 | 显示全部楼层
楼主这问题是自己没弄明白sprintf的用法啊,冤枉了keil5
 楼主| Cjy_JDxy 发表于 2017-9-26 17:03 | 显示全部楼层
一路向北lm 发表于 2017-9-26 16:50
使用sprintf 规格化一下即可,keil5可以啊,可以包含C++的头文件。

请问怎么规格化?包含C++的哪个头文件?
 楼主| Cjy_JDxy 发表于 2017-9-26 17:04 | 显示全部楼层
m114714336 发表于 2017-9-26 16:46
亲  你好像sprintf的用法 你还没 明白sprintf函数中间的“%d” %后面的格式 是跟你要转换的数的格式要保持 ...

谢谢!
1.png


这样还是不对。
m114714336 发表于 2017-9-26 17:08 | 显示全部楼层
Cjy_JDxy 发表于 2017-9-26 16:21
float Water_Flow_Now;
我分别用sprinntf打印格式%s,%f,%d,%ld,都不对,截图如下。

QQ图片20170926170120.png QQ图片20170926170053.png
QQ图片20170926170700.png QQ图片20170926170723.png

注意  sprintf函数是会做4舍5入处理的
一路向北lm 发表于 2017-9-26 17:13 | 显示全部楼层
Cjy_JDxy 发表于 2017-9-26 17:03
请问怎么规格化?包含C++的哪个头文件?

可以参考下这个 http://bbs.**/jishu_564684_1_6.html
m114714336 发表于 2017-9-26 17:15 | 显示全部楼层

那就不知道是不是你仿真出了问题哦
m114714336 发表于 2017-9-26 17:17 | 显示全部楼层

你是不是其他地方或中断里面对Water_Flow_Now进行赋值了
 楼主| Cjy_JDxy 发表于 2017-9-26 17:22 | 显示全部楼层
m114714336 发表于 2017-9-26 17:08
注意  sprintf函数是会做4舍5入处理的

2.png
3.png
4.png



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

 楼主| Cjy_JDxy 发表于 2017-9-26 17:23 | 显示全部楼层
m114714336 发表于 2017-9-26 17:17
你是不是其他地方或中断里面对Water_Flow_Now进行赋值了

没有
前功尽弃 发表于 2017-9-26 17:23 | 显示全部楼层
你把float型的数字每一位上的数值提取出来存放到char类型中的变量,根据变量不就可以点亮数码管了
 楼主| Cjy_JDxy 发表于 2017-9-26 17:24 | 显示全部楼层
IICeeprom 发表于 2017-9-26 16:39
还有啊,楼上的难道都没注意到iota这个关键词吗?难道没有笔误?

没有笔误
 楼主| Cjy_JDxy 发表于 2017-9-26 17:25 | 显示全部楼层
一路向北lm 发表于 2017-9-26 17:13
可以参考下这个 http://bbs.**/jishu_564684_1_6.html

你的网址有两个星号**
m114714336 发表于 2017-9-26 17:31 | 显示全部楼层
Cjy_JDxy 发表于 2017-9-26 17:22
不是四舍五入啊,直接就是0啊。我用的keil5.21。你用的是KEIL4还是5啊?难道是人品问题吗?

...

用的keil5啊
LeCreateStudio 发表于 2017-9-26 20:57 | 显示全部楼层
*10  *100 *1000变成整形再处理 即可
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);
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部