函数
<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 可表示值的范围,则会导致未定义行为

另见