//最多支持4位整数,三位小数 由于精度问题 最后一位会损失 123.123 转换之后 123.1229999
float char2float(char* ptr)
{
u8* ptrat=NULL;
u8* ptrbt=NULL;
u8 a[4]; //实时数据的值
float u1;
ptrat=ptr;//数据指针
ptrbt=ptr;//小数点位置指针
while(*ptrbt!=46){ptrbt++;xx_point++;}//小数点之前有几位数
switch(xx_point)
{
case 1:u1=*ptrat-48;
break;
case 2:a[0]=*ptrat-48;ptrat++;
a[1]=*ptrat-48;
u1=a[0]*10+a[1];
break;
case 3:
a[0]=*ptrat-48; ptrat++;
a[1]=*ptrat-48; ptrat++;
a[2]=*ptrat-48;
u1=a[0]*100+a[1]*10+a[2];
break;
case 4:
a[0]=*ptrat-48; ptrat++;
a[1]=*ptrat-48; ptrat++;
a[2]=*ptrat-48; ptrat++;
a[3]=*ptrat-48;
u1=a[0]*1000+a[1]*100+a[2]*10+a[3];
break;
default:
return 0;
break;
}
ptrbt++;//小数点指针指向小数点
ptrat+=2;//数据指针指向小数点后面的一位
while(*ptrbt!=38){ptrbt++;point_xx++;}
switch(point_xx)
{
case 1:a[0]=*ptrat-48;
u1=u1+a[0]*0.1;
break;
case 2:a[0]=*ptrat-48;ptrat++;
a[1]=*ptrat-48;
u1=u1+a[0]*0.1+a[1]*0.01;
if(xx_point==1)u1+=0.01;//矫正
break;
case 3:
a[0]=*ptrat-48; ptrat++;
a[1]=*ptrat-48; ptrat++;
a[2]=*ptrat-48;
u1=u1+a[0]*0.1+a[1]*0.01+a[2]*0.001;
if(xx_point==3||xx_point==4)u1+=0.001;//矫正
break;
}
xx_point=0;
point_xx=0;
return u1;
}
字符串转浮点数
最新推荐文章于 2024-02-20 19:46:03 发布