打印

会单片机数据四舍五入的进来,指点一下

[复制链接]
6067|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
铭泰铭泰|  楼主 | 2012-3-29 18:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用单片机处理数据遇到一个不大不小的问题,
有一个公式y=0.09*x-45 其中x是unsigned char型,x的取值范围为[500,2500]我有几个问题
一:这里的y定义成什么类型比较好,float型吗?
二:算出y后,我希望对它四舍五入后,返回一个unsigned char型的数据
我的意思是说:算出y后,四舍五入以后,再让y变成unsigned char型
我举一个例子,假如我算出来y为178.3,我想让它四舍五入后变成178,然后返回unsigned char型的178,如果我算出来的是178.8,我想让他四舍五入后变成179,然后返回unsigned char型的179
大家可以帮帮我吗?我用在舵机角度控制上面

相关帖子

沙发
hxy6951| | 2012-3-29 19:58 | 只看该作者
y=unsigned char(0.09*x-45 +0.5)    个人愚见

使用特权

评论回复
板凳
dqyubsh| | 2012-3-29 20:19 | 只看该作者
顶2楼,加0.5后取整

使用特权

评论回复
地板
joyme| | 2012-3-30 11:52 | 只看该作者
你们家unsigned char可以表示500-2500的数?你用的是火星机?unsigned char 8bit 0-255,再大不久溢出了吗

使用特权

评论回复
5
铭泰铭泰|  楼主 | 2012-3-30 15:46 | 只看该作者
搞错了,x定义成unsigned short int

使用特权

评论回复
6
joyme| | 2012-3-30 16:29 | 只看该作者
用单片机最好不要做浮点运算(太耗资源)
unsigned int y,x;
y= 9 * x - 4500;
y = y/100 + ((y%100) >= 50)?1:0;
当然能把除法换成减法最好

使用特权

评论回复
7
zd420325| | 2012-3-31 15:07 | 只看该作者
顶6楼的,扩大100倍,然后用移位或者减法来实现,我用过一个单片机,根本就没有乘除法运算.嘿嘿.

使用特权

评论回复
8
joyme| | 2012-4-9 18:01 | 只看该作者
其实很多时候乘法改动简单的也可以用一位做,如9 * x  改成 x<<3 + x;

使用特权

评论回复
9
学会不迷茫| | 2012-4-9 20:56 | 只看该作者
加法的优先级比移位的高,你应该加括号 8# joyme

使用特权

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

本版积分规则

2

主题

16

帖子

0

粉丝