atof()函數
atof():double atof(const char *str );
功 能: 把字符串轉換成浮點數
str:要轉換的字符串。
返回值:每一個函數返回 double 值。此值由將輸入字符作為數字解析而生成。 假設該輸入無法轉換為該類型的值,則返回值為 0.0。
函數說明 :atof()會掃描參數nptr字符串,跳過前面的空格字符。直到遇上數字或正負符號才開始做轉換。而再遇到非數字或字符串結束時('\0')才結束轉換,並將結果返回,str字符串可包括正負號、小數點或E(e)來表示指數部分。
#include<iostream> using namespace std; double atof_my(const char *str) { double s=0.0; double d=10.0; int jishu=0; bool falg=false; while(*str==' ') { str++; } if(*str=='-')//記錄數字正負 { falg=true; str++; } if(!(*str>='0'&&*str<='9'))//假設一開始非數字則退出。返回0.0 return s; while(*str>='0'&&*str<='9'&&*str!='.')//計算小數點前整數部分 { s=s*10.0+*str-'0'; str++; } if(*str=='.')//以后為小樹部分 str++; while(*str>='0'&&*str<='9')//計算小數部分 { s=s+(*str-'0')/d; d*=10.0; str++; } if(*str=='e'||*str=='E')//考慮科學計數法 { str++; if(*str=='+') { str++; while(*str>='0'&&*str<='9') { jishu=jishu*10+*str-'0'; str++; } while(jishu>0) { s*=10; jishu--; } } if(*str=='-') { str++; while(*str>='0'&&*str<='9') { jishu=jishu*10+*str-'0'; str++; } while(jishu>0) { s/=10; jishu--; } } } return s*(falg?-1.0:1.0); } int main() { char *s1=" 123.456567567e-10"; char *a1=" 123.456567567e-10"; char *s2="1234567.235e+10"; char *a2="1234567.235e+10"; char *s3=" 123.45656\07567e-10"; char *a3=" 123.45656\07567e-10"; double sum_1=atof_my(s1); double sum1=atof(a1); double sum_2=atof_my(s2); double sum2=atof(a2); double sum_3=atof_my(s3);//遇到'\0'結束 double sum3=atof(a3); cout<<"atof_my:"<<sum_1<<endl; cout<<"atof :"<<sum1<<endl; cout<<"atof_my:"<<sum_2<<endl; cout<<"atof :"<<sum2<<endl; cout<<"atof_my:"<<sum_3<<endl; cout<<"atof :"<<sum3<<endl; system("pause"); return 0; }執行結果比較圖: