字串函數---atof()函數詳解及實現(完整版),---atof函數詳解

來源:互聯網
上載者:User

字串函數---atof()函數詳解及實現(完整版),---atof函數詳解

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.0return 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;}
運行結果比較圖:




本例用atof 函數將字元型轉換為數值更改程式,用其他方法實現

double atof(const char* s)
{
double val,power;
int sign,i;
//去掉字串中的空格
for(i=0;isspace(s[i]) && s[i] !=0;++i)
;
//判斷正負數 ,並將i指向下一個位置
sign = (s[i] == '-') ? -1:1;
if(s[i] == '+' || s[i] == '-')
i++;
//取浮點數的整數部分
for(val=0.0;isdigit(s[i]) && s[i] !=0;++i)
val = 10*val+s[i]-'0';
//取小數點
if(s[i] == '.')
i++; //後一個位置
//取小數點後面數
for(power=1.0;isdigit(s[i]) && s[i] !=0;++i)
{
val = 10*val+s[i]-'0';
power*=10; //小數的位元
}
return sign*val/power; //計算得到浮點數
}
hi.baidu.com/...a.html
 
atof 函數的具體用法?

歡迎採納
函數名: atof
  功 能: 把字串轉換成浮點數
  名字來源:array to floating point numbers 的縮寫
  用 法: double atof(const char *nptr);
  程式例:
  #include <stdlib.h>
  #include <stdio.h>
  int main()
  {
  float f;
  char *str = "12345.67";
  f = atof(str);
  printf("string = %s float = %f\n", str, f);
  return 0;
  }
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.