需要注意两点: [1] float的精度是6位有效数字,范围约为:10^-38 ~ 10^38,占用4个字节。 [2] double的精度是15位有效数字,范围约为:10^-308 ~ 10^308,占用8个字节。 // convert char * into double #include <cstdio> #include <cstring> #include <cctype> #define LOCAL 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 *= 10.0; } return sign * val / power; } const int maxn=17;// can not convert this string into double because of precision, in fact, read only 16 characters char szInput[maxn]; int main() { #ifdef LOCAL freopen("output.txt","w",stdout); #endif double res=0.0;// note, 15 significant digits memset(szInput,0,sizeof(szInput));// clear buffer printf("Enter a string:"); fgets(szInput,sizeof(szInput),stdin); // check the length of string printf("in fact, the string input is: %s/n",szInput); res=atof(szInput); printf("%lf/n",res); return 0; } /* Enter a string: 123456789.123456789 in fact, the string input is: 123456789.123456 123456789.123456 */