void floatTochar(float f,unsigned char s[])//轉換返回長度
void intTochar(unsigned int inter,unsigned char buf[],unsigned char len)//指定長度轉換
#include "math.h"
void floatTochar(float f,unsigned char s[])//轉換返回長度
{
//int dotsize=2; //保留小數點後兩位
unsigned long int value,size,length;
int i,j;//防止j=length-1爲負數
unsigned char temp,isNegative;
size=0; //value=0的情況
/* for(i=0;i<dotsize;i++) //這種方法不行,結果異常
{
f=f*10; //保留小數點後兩位
}
value=(unsigned long int)f; */
if(f<0)
{
f=0-f;
isNegative=1;
}
value=(unsigned long int)(f*100);//浮點轉整型
//分離整數,並轉爲ascii碼
for(i=0;value>0;i++)
{
s[i]=value%10+'0';
value=value/10;
}
size=i;
length=size;
for(i=0,j=length-1;length>1;length/=2)
{
temp=s[i];
s[i]=s[j];
s[j]=temp;
i++;
j--;
}
//考慮以下小數點後的三種情況
length=size;
if(length==0) //0.001
{
s[length+2]='0';
s[length+1]='0';
s[length]='0';
size=size+3;
}
if(length==1) //0.01
{
s[length+1]=s[length-1];
s[length]='0';
s[length-1]='0';
size=size+2;
}
if(length==2) //0.1
{
s[length]=s[length-1];
s[length-1]=s[length-2];
s[length-2]='0';
size=size+1;
}
//考慮小數點前的位數情況,規定小數點前2位數
if(size==3) //小數點前1位的情況
{
for(i=0;i<size;i++)
{
s[size-i]=s[size-i-1];
}
s[0]='0';
size++;
}
for(i=0;i<2;i++)
{
s[size-i]=s[size-i-1];
}
s[size-i]='.';
size++;
s[size]='\0';
size++;
for(i=0;i<size;i++)
{
s[size-i]=s[size-i-1];
}
if(isNegative==1)
{
s[0]='-';
size++;
}
else
{
s[0]='+';
size++;
}
}
void intTochar(unsigned int inter,unsigned char buf[],unsigned char len)//指定長度轉換
{
int i;
for(i=len-1;i>=0;i--)
{
buf[i]=inter%10+'0';
inter=inter/10;
//buf[i]=inter%((unsigned int)pow((double)10,(double)(len-i)))/((unsigned int)pow((double)10,(double)(len-1-i)))+'0';
}
}