单片机y=0.09*x-45的数据处理

2020-01-22 12:14发布

本帖最后由 shafei 于 2012-3-29 19:50 编辑

我用单片机处理数据遇到一个不大不小的问题,
有一个公式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
大家可以帮帮我吗?我用在舵机角度控制上面
刚才有人提醒因为X是从500到2500,所以X不是uchar,应该定义成uint
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
75条回答
y574924080
1楼-- · 2020-01-22 16:53
这个应该对你有帮助
johnsonz999
2楼-- · 2020-01-22 17:40
char的是8位的怎么能在500-2500呢?
jimmy_xt
3楼-- · 2020-01-22 23:29
 精彩回答 2  元偷偷看……
shafei
4楼-- · 2020-01-23 00:27
本帖最后由 shafei 于 2012-3-30 09:11 编辑
jimmy_xt 发表于 2012-3-29 19:55
不要定义为浮点数,运算太慢了……
把值扩大100倍
计算y=9*x-4500


谢谢你了,你给了我一个很好的启发,这样数字就成了0到18000,我可以从判断第2位就可以了,如果第2位大于或者等于5,我就让它第三位加一,如果第2位小于5,后面的两位直接都不要
gaolf_2012
5楼-- · 2020-01-23 01:08
近似的做法;两边都乘以256
y=0.09*x-45
得到256*y=23.04*x-11520
如果对数据要求不是很严格的话,可以近似的认为 y = (23*x-11520)>>8
可见当x =500时,23*x=11500,买嘎!nngb的,第一个数就这么不给面子!还是从501开始吧。
lixupeng
6楼-- · 2020-01-23 02:40
jimmy_xt 发表于 2012-3-29 19:55
不要定义为浮点数,运算太慢了……
把值扩大100倍
计算y=9*x-4500

使用过了这个方法不错^_^

一周热门 更多>