完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
unsigned char dat[5]={ 2,4,3,5,6};
int x; double d; (第一种) x = dat[0]*10000+dat[1]*1000+dat[2]*100+dat[3]*10+dat[4]; d = x/1000; 得到 d=24.300 (省略了小数后两位) (第二种) d = dat[0]*10+dat[1]+dat[2]*0.1+dat[3]*0.01+dat[4]*0.001; 得到 d=24.356 (正确) 不知道是怎么回事?? |
|
相关推荐
4个回答
|
|
|
这个应该是跟编译器生成的乘除法代码有关,而跟单片机无关吧
|
|
|
|
|
|
这个跟运算时的数制转换有关,第二个因为后面你用的是0.1 0.01等数,是浮点型数据,因此计算时全部转换为浮点型计算,不会丢掉位数。第一个都是整型,计算时是用整型数据计算的,特别是第二步 x/1000这个算式,数据就是在这里丢掉的。可以改成 x/1000.0 试试看,应该就不会丢了。或者你的 x 也定义成double型。
|
|
|
|
|
|
你的x是int类型,他是整数类型定义,不可能有小数位的。你改成double或者float就OK了,int只分配2个字节都存储整型,double他会另分配两个字节存储为小数位。你可以自己看看单片机的数据类型相关的。
|
|
|
|
|
|
你的dat[5]定义成unsigned char,还dat[0]*10000,不出错才怪。
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 10:55 , Processed in 1.271269 second(s), Total 82, Slave 64 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
3377