把字符串转化成双精度浮动点数的问题?
程序如下:
#include "stdafx.h "
double atof(char s[]);
int _tmain(int argc, _TCHAR* argv[])
{
//int i = sizeof(double);
//printf( "%d ",i);
double d;
d = atof( "789.235 ");
printf( "%f ",d);
return 0;
}
double atof(char s[])
{
double val,power;
int i,sign;
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 *= power;
}
return sign * val/power;
}
看上去没什么问题,但最后结果居然是789235.000000,这是怎么回事??
[解决办法]
double atof(char s[])
{
double result;
sscanf(s, "%f ", &result);
return result;
}