可以处理类似 123.45E-6之类的科学计数法的字符串
#include "stdio.h"
#include "stdlib.h"
#include "ctype.h"
main()
{
double atof2(char s[]);
printf("%f\n",atof2("123.45E4"));
system("pause");
}
double atof2(char s[])
{
double val,power,endval=1.0;
int i,sign,exponent;
for(i=0;isspace(s[i]);i++)
;
sign=(s[i]=='-')?-1:1;
if(s[i]=='+'||s[i]=='-')
i++;
for(val=0.0;isdigit(s[i]);i++)
val=10.0*val+(s[i]-'0');
if(s[i]=='.')
i++;
for(power=1.0;isdigit(s[i]);i++)
{
val=10.0*val+(s[i]-'0');
power*=10.0;
}
val=sign*val/power;
// printf("%f\n",val);
if(s[i]=='e'||s[i]=='E')
i++;
sign=(s[i]=='-')?-1:1;
if(s[i]=='-'||s[i]=='+')
i++;
for(exponent=0;isdigit(s[i]);i++)
exponent= 10*exponent+(s[i]-'0');
for(i=0;i<exponent;i++)
endval=endval*10;
// printf("%f\n",val);
if(sign==-1)
endval=1.0/endval;
// printf("%f\n",endval);
return val*endval;
}