从综合电子论坛看到别人发了一个帖子,在弹片机内,不用浮点数计算的话,如何让整数表示小数。
这是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里面放的就是要的结果
这样做有个好处就是节省空间,但是考虑到转换的速度问题,如果在对数据处理速度不是很高的情况下,完全可以这样做。相反,就要像别的办法了。
用户377235 2013-3-18 13:15
用户78630 2007-1-25 19:57
用户1053025 2007-1-25 10:48
等你回来。。。
用户1021297 2007-1-25 10:16
用户1175252 2007-1-24 23:42
用户19364 2007-1-24 22:25
人生的阴晴难料!!!我也不知道说点啥安慰你的话,总之 别太难过了, 刚看了你的博客 的确不错的!!加油呀!!
。。。。。。。。冰槟榔
用户19364 2007-1-24 22:21
用户1053025 2006-11-20 15:34
good