OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5322|回复: 12

关于float与double,这一定是个基础性的问题。。。

[复制链接]

5

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2014-7-15
在线时间
1 小时
发表于 2015-4-14 18:34:29 | 显示全部楼层 |阅读模式
5金钱
修改前后程序如下
(修改前)
unsigned int wendu;
float wendu2;
...............
wendu = USART_RX_BUF[10];
wendu <<= 8;
wendu |= USART_RX_BUF[9];
wendu2 = (float)wendu/10.0;
.............
sprintf(buf,"%.1f",wendu2);
TEXT_SetText(hWin,(const char*)buf);

这样写结果显示屏上面TEXT控件显示的数值为       0.0


(修改后)
unsigned int wendu;
double wendu2;
...............
wendu = USART_RX_BUF[10];
wendu <<= 8;
wendu |= USART_RX_BUF[9];
wendu2 = (double)wendu/10.0;
.............
sprintf(buf,"%.1f",wendu2);
TEXT_SetText(hWin,(const char*)buf);

这样子就能正常显示温度值了     比如    13.2
这是为什么呢?求帮忙解释一下,,,,感激不尽

(我的温度值串口传输过来是比实际值大十倍的,所以除以了10)

玩出极致,做疯狂“玩家”。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

5

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2014-7-15
在线时间
1 小时
 楼主| 发表于 2015-4-14 18:36:14 | 显示全部楼层
float和double不都是表示浮点数的吗,据说只是精度不同而已。。。所以很困惑。
玩出极致,做疯狂“玩家”。
回复

使用道具 举报

14

主题

338

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
464
金钱
464
注册时间
2013-6-15
在线时间
15 小时
发表于 2015-4-14 20:05:05 | 显示全部楼层
不是这的问题
回复

使用道具 举报

2

主题

1447

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2258
金钱
2258
注册时间
2010-12-16
在线时间
206 小时
发表于 2015-4-14 20:13:53 | 显示全部楼层
%f 后面带的是double , 带float会出错 .
技术讨论请发帖 , 需要我回复请点左下的 < 回复 > 让系统通知我 . 本人不通过其他方式返回任何参数.
回复

使用道具 举报

14

主题

338

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
464
金钱
464
注册时间
2013-6-15
在线时间
15 小时
发表于 2015-4-14 20:33:53 | 显示全部楼层
编译器回复【4楼】shihantu:
---------------------------------
编译器是会自己转换成double的吧
回复

使用道具 举报

2

主题

1447

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2258
金钱
2258
注册时间
2010-12-16
在线时间
206 小时
发表于 2015-4-15 11:00:04 | 显示全部楼层
回复【5楼】as564335sa:
---------------------------------
像sprintf这种不定长参数函数 , 编译器不会转格式 , 必须要人工指定 .
技术讨论请发帖 , 需要我回复请点左下的 < 回复 > 让系统通知我 . 本人不通过其他方式返回任何参数.
回复

使用道具 举报

14

主题

338

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
464
金钱
464
注册时间
2013-6-15
在线时间
15 小时
发表于 2015-4-15 15:49:34 | 显示全部楼层
回复【6楼】shihantu:
---------------------------------
看图说话
回复

使用道具 举报

14

主题

338

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
464
金钱
464
注册时间
2013-6-15
在线时间
15 小时
发表于 2015-4-15 15:50:20 | 显示全部楼层

.........
回复

使用道具 举报

5

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2014-7-15
在线时间
1 小时
 楼主| 发表于 2015-4-15 22:47:45 | 显示全部楼层
回复【8楼】as564335sa:
---------------------------------
赞,受你启发我用MDK仿真试了一下,也和你一样,纳闷了,反正我就用了double型。可能是我程序哪里写错了。。。
玩出极致,做疯狂“玩家”。
回复

使用道具 举报

5

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2014-7-15
在线时间
1 小时
 楼主| 发表于 2015-4-15 22:50:56 | 显示全部楼层
我也新建了一个试了一下。

玩出极致,做疯狂“玩家”。
回复

使用道具 举报

14

主题

338

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
464
金钱
464
注册时间
2013-6-15
在线时间
15 小时
发表于 2015-4-16 00:22:14 | 显示全部楼层
回复【9楼】搜救小册老:
---------------------------------
嗯,有些问题还是自己实践一下好,你那个问题你完全可以跟踪调试,逐条语句跟踪,看问题出在哪里
回复

使用道具 举报

2

主题

1447

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2258
金钱
2258
注册时间
2010-12-16
在线时间
206 小时
发表于 2015-4-16 01:45:07 | 显示全部楼层
回复【8楼】as564335sa:
---------------------------------
1. 建议跟踪传入参数在栈的格式, 这个测试会受栈的分布顺序干扰,本身涉及到对栈越界访问的问题 。

2. 这种问题最有效的办法是查规范。
技术讨论请发帖 , 需要我回复请点左下的 < 回复 > 让系统通知我 . 本人不通过其他方式返回任何参数.
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2019-5-17
在线时间
14 小时
发表于 2020-6-12 21:45:13 | 显示全部楼层
你好,之前我也遇到过类似的情况,float无法输出正确的数据,double就可以。请问,到底什么原因,您解决了么?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-28 17:35

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表