打印

stm32 float类型变量自动舍去小数 这么简单的代码也有问题?

[复制链接]
8218|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 深夜星空 于 2013-9-27 10:36 编辑

上图,(图片顺序怎么到了,图1在最下面,图8为最后一张)stm32 单步在线仿真,定义一个float变量c,赋值为3.456时结果没问题,赋值为10/3时,结果只是3。最后乘以1000,结果3000,确定小数点后没有数字了。多谢各位,帮忙看一下。

8.png (29.4 KB )

确定小数点后面没有数字了

确定小数点后面没有数字了

7.png (21.57 KB )

乘以1000,

乘以1000,

6.png (30.48 KB )

结果为3.0

结果为3.0

5.png (18.09 KB )

运行c=10/3后

运行c=10/3后

4.png (18.4 KB )

变量结果正确

变量结果正确

3.png (23.28 KB )

运行c=3.456之后

运行c=3.456之后

2.png (37.03 KB )

变量初始值为0

变量初始值为0

1.png (27.28 KB )

初始程序间断点

初始程序间断点
沙发
IJK| | 2013-9-27 14:43 | 只看该作者
这种问题跟STM32没有关系,关键取决于编译器,LZ用什么编译器?

使用特权

评论回复
板凳
IJK| | 2013-9-27 14:48 | 只看该作者
本帖最后由 IJK 于 2013-9-27 14:49 编辑

试了一下,是LZ的问题,正确的写法是:
c = (float)10/3;
或者
c = 10.0/3;

使用特权

评论回复
地板
深夜星空|  楼主 | 2013-9-27 15:18 | 只看该作者
IJK 发表于 2013-9-27 14:48
试了一下,是LZ的问题,正确的写法是:
c = (float)10/3;
或者

用的是IAR,我明白了,后面结果默认为int型了,所以向高精度变量赋值也是int型,而不是float型变量的问题。多谢多谢!

使用特权

评论回复
5
戈卫东| | 2013-9-27 16:02 | 只看该作者
它计算的时候只根据表达式本身进行转换,不管它会被传给什么样的变量

使用特权

评论回复
6
hkcj| | 2013-9-27 20:45 | 只看该作者
不是很懂这一块啊   楼主   帮你顶一个

使用特权

评论回复
7
深夜星空|  楼主 | 2013-9-29 22:50 | 只看该作者
戈卫东 发表于 2013-9-27 16:02
它计算的时候只根据表达式本身进行转换,不管它会被传给什么样的变量

恩恩,已经明白了,多谢多谢

使用特权

评论回复
8
shenpingbing| | 2013-9-30 10:24 | 只看该作者
这个是C语言的规定   看来楼主C的基础有待于加强啊

使用特权

评论回复
9
elecintop| | 2013-9-30 11:53 | 只看该作者
楼主明白了就好

使用特权

评论回复
10
关山吴钩| | 2015-4-5 17:08 | 只看该作者
楼主C语言没学好

使用特权

评论回复
11
深夜星空|  楼主 | 2015-4-5 23:58 | 只看该作者
caosix 发表于 2015-4-5 20:20
说了半天::究竟   是不是 正确答案  c = (float)10/3;

个人觉得 板凳 是正确的————谢谢 板凳:

是的,分数都给他了,呵呵

使用特权

评论回复
12
小浣熊| | 2015-4-6 21:11 | 只看该作者
看看,这个是最基础的C的知识。

使用特权

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

本版积分规则

31

主题

345

帖子

3

粉丝