日志档案

发表于 2006-11-11 2:01:40

2

标签: 程序  小数  整数  弹片机  

(程序)关于小数用整数来表示的小程序

从综合电子论坛看到别人发了一个帖子,在弹片机内,不用浮点数计算的话,如何让整数表示小数。

这是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里面放的就是要的结果

这样做有个好处就是节省空间,但是考虑到转换的速度问题,如果在对数据处理速度不是很高的情况下,完全可以这样做。相反,就要像别的办法了。

 

系统分类: 软件开发   |   用户分类: 原创   |   来源: 无分类   |   【推荐给朋友】

    阅读(1199)    回复(1)  

投一票您将和博主都有获奖机会!