打印
[STM32F1]

STM32F1对于浮点数的处理

[复制链接]
5144|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
huhaomcu|  楼主 | 2015-5-23 21:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我在程序内有如下计算,希望得到的是浮点数结果;
float vol;
vol = (float)(((mta & 0xffff0000)>>16) * 33 *100 /40960);
可我通过KEIL的WATCH查看变量vol为什么得出来的结果仍然是整型数据咧???

沙发
amanda_s| | 2015-5-25 13:22 | 只看该作者
光在前面加(float)没有用,因为里面计算的时候已经转成整型了。
计算式里的数值也要用float类型的值

使用特权

评论回复
板凳
bear1| | 2015-5-25 14:56 | 只看该作者
amanda_s 发表于 2015-5-25 13:22
光在前面加(float)没有用,因为里面计算的时候已经转成整型了。
计算式里的数值也要用float类型的值 ...

什么意思?没搞懂

使用特权

评论回复
地板
sjw1716094642| | 2015-5-25 15:11 | 只看该作者
vol = (float)(((mta & 0xffff0000)>>16) * 33 *100 /40960.0);

使用特权

评论回复
5
周董| | 2015-5-25 20:42 | 只看该作者
sjw1716094642 发表于 2015-5-25 15:11
vol = (float)(((mta & 0xffff0000)>>16) * 33 *100 /40960.0);

这个说的是啥意思呀,可以解释下吗??

使用特权

评论回复
6
sjw1716094642| | 2015-5-26 09:59 | 只看该作者
周董 发表于 2015-5-25 20:42
这个说的是啥意思呀,可以解释下吗??

书上这么说的

使用特权

评论回复
7
amanda_s| | 2015-5-27 13:52 | 只看该作者
bear1 发表于 2015-5-25 14:56
什么意思?没搞懂

比如(float)13/5,和13.0/5.0
试一下计算结果,就知道了。
前者虽然你加了float,但在计算13/5的时候就已经将小数点后面的数四舍五入了。

使用特权

评论回复
8
desomond| | 2015-5-27 19:09 | 只看该作者
这个计算的过程全部是以整形数计算的,其中如果有除不尽的情况,或者出现小数的时候都会变成整数,最后将结果强制转换为float型,其实没有任何意义了,至于 为什么会从调试窗口看到的是整形,你可以让它以浮点显示就好了

使用特权

评论回复
9
戈卫东| | 2015-5-27 20:12 | 只看该作者
第一项转换一下,后面就没有问题了
float vol;
vol = (mta & 0xffff0000)>>16;
vol = vol * 33 *100 /40960;

使用特权

评论回复
10
jcx0324| | 2015-5-29 16:56 | 只看该作者
单精度5.0f这样写会比较好

使用特权

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

本版积分规则

189

主题

508

帖子

3

粉丝