代码由院内大佬所写,本人加上解析给需要的小伙伴一点参考
int i,j,k;
long temp,tempoten;
u8 intpart[20], dotpart[20];
if(data<0)
{
str[0]='-';
data=-data;
}
else str[0]='+';
temp=(long)data;//长整型
i=0;
tempoten=temp/10;
while(tempoten!=0)//有十位
{
intpart[i]=temp-10*tempoten+48; //intpart【0】为个位数
temp=tempoten;//十位十位地降
tempoten=temp/10;//如果他有百位或及其以上的数
i++;
}
intpart[i]=temp+48;//最高位
data=data-(long)data;//得到小数部分
for(j=0;j<12;j++)
{
dotpart[j]=(int)(data*10)+48;//从第一位小数开始放入数组
data=data*10.0;//形成个位
data=data-(long)data;//减去个位
}
for(k=1;k<=i+1;k++)
str[k]=intpart[i+1-k];//整型部分 i为整型最高位 str[0]为符号
str[i+1+1]='.';
for(k=i+3;k<i+j+3;k++) //小数部分 j为小数最低位
str[k]=dotpart[k-i-3];//由dotpart[0]开始
str[i+j+3]=0x0D;