函式
<cstdlib>

atof

double atof (const char* str);
將字串轉換為 double
解析 C 字串 str,將其內容解釋為浮點數,並將其值作為 double 返回。

該函式首先丟棄儘可能多的空白字元(如 isspace 中所定義的),直到找到第一個非空白字元。然後,從這個字元開始,取儘可能多的有效字元,這些字元遵循類似於浮點數字面量的語法(見下文),並將它們解釋為一個數值。最後一個有效字元之後的字串其餘部分將被忽略,並且對該函式的行為沒有影響。

對於使用 "C" 區域設定的 atof,一個有效的浮點數由一個可選的符號字元(+-)後跟一串數字組成,該數字串可以包含一個小數點字元(.),並可以選擇性地後跟一個指數部分(一個 eE 字元,後跟一個可選的符號和一串數字)。
對於使用 "C" 區域設定的 atof,一個有效的浮點數由一個可選的符號字元(+-)後跟以下之一組成:
- 一串數字,可以包含一個小數點字元(.),並可以選擇性地後跟一個指數部分(一個 eE 字元,後跟一個可選的符號和一串數字)。
- 一個 0x0X 字首,然後是一串十六進位制數字(如 isxdigit 中所定義的),可以包含一個分隔整數和小數部分的小數點。可以選擇性地後跟一個以 2 為底的冪指數(一個 pP 字元,後跟一個可選的符號和一串十六進位制數字)。
- INFINFINITY(忽略大小寫)。
- NANNAN序列(忽略大小寫),其中序列是一串字元,每個字元要麼是字母數字字元(如 isalnum 中所定義的),要麼是下劃線字元(_)。

如果 str 中的第一個非空白字元序列不構成一個剛定義的有效浮點數,或者因為 str 為空或只包含空白字元而沒有這樣的序列,則不執行轉換,函式返回 0.0

引數

str
以浮點數表示形式開頭的 C 字串。

返回值

成功時,該函式返回轉換後的浮點數,型別為 double
如果無法執行有效的轉換,該函式返回零(0.0)。
如果轉換後的值超出了 double 可表示值的範圍,則會導致未定義行為。當存在這種可能性時,請參閱 strtod 以獲得更健壯的跨平臺替代方案。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/* atof example: sine calculator */
#include <stdio.h>      /* printf, fgets */
#include <stdlib.h>     /* atof */
#include <math.h>       /* sin */

int main ()
{
  double n,m;
  double pi=3.1415926535;
  char buffer[256];
  printf ("Enter degrees: ");
  fgets (buffer,256,stdin);
  n = atof (buffer);
  m = sin (n*pi/180);
  printf ("The sine of %f degrees is %f\n" , n, m);
  return 0;
}

輸出

Enter degrees: 45
The sine of 45.000000 degrees is 0.707101


資料競爭

訪問由 str 指向的陣列。

異常 (C++)

無異常保證:此函式從不丟擲異常。

如果 str 沒有指向一個有效的 C 字串,或者如果轉換後的值超出了 double 可表示值的範圍,則會導致未定義行為

另見