在嵌入式系统设计中不可避免地要使用浮点数进行数据采集、运算、处理显示以及传输。但是由于浮点数数据的特殊性,其在显示或传输的处理上没有整数及字符串方便。一般来说浮点数格式的数据除了用于数学运算以及存储以外,在别的用途上一般要进行格式转换,最常见的方式是转换为整数及小数点位置信息以及将其转换为字符串。下面是我在实际工程中运用C语言处理浮点数的显示及传输的程序源代码,其功能是将-999.0~9999.0的浮点数转换为字符串及小数点位置(住在转换后的字符串中不含有'.'字符),这样转换的目的是便于数码管显示,当然如用液晶显示则要在转换后的字符串中保留'.'符号。在程序中没有用到C语言的库函数。因为库函数太占用存储资源了。
void display_double(double f )
{double t1,t2;
unsigned char i=0,k=0,m=0,n=0;
unsigned char a[5];
unsigned char flag=0;
if(f<0.00001)
{flag=1;f=-f;a[m++]='-';}
t1=f;t2=f;
while(t1>1)
{t1=t1/10;
i++;}//i代表从最高位起到最低位的小数点位置号。
if(i==0)i=1;
if(flag)i++;
t2=f;
for(n=0;n<4;n++)
{ if(m>3)break;
if(t2>1000.0)
{ t2=t2/1000.0;
a[m++]=(int)t2+'0';
t2=t2-(int)(t2);}
if(t2>100.0)
{ t2=t2/100.0;
a[m++]=(int)t2+'0';
t2=t2-(int)(t2);
}
if(t2>10.0)
{
t2=t2/10.0;
a[m++]=(int)t2+'0';
t2=t2-(int)(t2);
}
if(t2>1.0)
{
a[m++]=(int)(t2)+'0';//取t2的整数
t2=t2-(int)(t2);
}
if(t2<1.0)
while(t2<1.0)
{if(m>3)break;
if(m==0&&flag==0 || m==1&&flag)a[m++]='0';
t2=t2*10.0;
a[ m++]=(int)(t2)+'0';
t2=t2-(int)(t2);
}
}
a[4]='/0';
displayStr(a,i);
return;
}
其中 displayStr()是现实一个具有四个字符串的现实功能的现实函数,a是转换后字符数组,i是小数点的位置。