标签:
程序 小数 整数 弹片机
从综合电子论坛看到别人发了一个帖子,在弹片机内,不用浮点数计算的话,如何让整数表示小数。
这是byd318的网友发的:
Question: 在8位单片机中不使用浮点数的方法,如何将一个字节的数据得到浮点数的BCD码
Instruction:
比如我们做一个AD0809的AD采集(8位),测试电压在5V时得到的是数字量是255,如果得到的数字量是97,则对应计算公式: 5*97/255=1.902;或许你可以写为:数字量/51; 我们都知道在C语言中,整数除以整数肯定只有得到整数;就是说,如何在整型中得到所需要的BCD码(1,9,0,2);有人提出定义浮点数来处理,当然这样没问题:今天我们提出的只用整型来处理:
Intent:
看看谁能提出更好的实际可用的解决办法;挑战自我!帮助他人!
于是我思考了一会,发现其实可以这样做:
unsigend char *p,i;
unsigned int j,k;
for(i = 0; i < 4;i++)
{
*(p + i) = j/k;
j = j%k;
if(j > 0)
{
j = j *10;
}
}
你看看能达到要求么,i是控制小数位的个数,如果要保留1位小数,i就应该<2,2位小数,i<4;3位小数,i<5;以此类推;k是除数,j是被除数;*p里面放的就是要的结果
这样做有个好处就是节省空间,但是考虑到转换的速度问题,如果在对数据处理速度不是很高的情况下,完全可以这样做。相反,就要像别的办法了。
系统分类:
软件开发 | 用户分类:
原创 | 来源:
无分类 | 【推荐给朋友】