69,371
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
float decimal(char *q)
{
float dec=0.0f;
float j=1.0f;
char *p = q++; //照理说应该会跳到小数点后第一位
while(*p&&(*p>='0'&&*p <='9'))// 当为数字且不为\0时候执行
{
j*=0.1f;
dec+=(*p-'0')*j; //通过递归得到小数部分
p++;
}
//printf("%f\n",dec);
return dec;
}
float atof(char *str)
{
int c;
int sign;
int number=0;
int j=1;
char *p=str;
//float decimal();
float dec;
while(*p) //截取整数部分
{
c=(int)(unsigned char)*p++;
while(c==' ')
{
++p;
}
sign=c;
if(c=='-'||c=='+')
c = (int)(unsigned char)*p++;
while(c>='0'&&c <='9')
{
number=number*10+(int)(c-'0');
c=(int)(unsigned char)*p++;
}
//p++;
if(c=='.')
break;
p++; //换个位置
}
// printf("%d\n",number);
dec =decimal(p);
if(sign=='-')
return -(number+dec);
else
return (number+dec);
}
int main(void)
{
char *p="-98.345";
printf("%f",atof(p));
return 0;
}