atof
在头文件<stdlib.h>中定义 | | |
---|---|---|
double atof(const char * str); | | |
解释str指向的字节串中的浮点值。
函数丢弃任何空格字符(由std :: isspace()确定),直到找到第一个非空白字符。 然后,它需要尽可能多的字符来形成有效的浮点表示并将它们转换为浮点值。 有效的浮点值可以是以下值之一:
- 十进制浮点表达式。它由以下部分组成:
- (可选)加号或减号
- 非空十进制数字序列可选地包含小数点字符(由当前C
locale
来决定)(定义有效数字) - (可选)
e
或者E
跟随可选的负号或加号和非空序列的十进制数字(定义指数)
- 二进制浮点表达式。它由以下部分组成:
- (可选)加号或减号
0x
或0X
- 非空的十六进制数字序列可选地包含小数点字符(由当前C确定
locale
)(定义有效数字) - (可选)
p
或者P
跟随可选的负号或加号和非空序列的十进制数字(定义指数)
- 无限表达。它由以下部分组成:
- (可选)加号或减号
INF
或者INFINITY
无视事件
- 非数字表达式。它由以下部分组成:
- (可选)加号或减号
NAN
或NAN(
char_sequence)
忽略该NAN
部分的情况。char_sequence只能包含字母数字字符。结果是安静的NaN浮点值。
- 任何其他可能被当前安装的C
locale
接受的表达式
参数
str | - | 指向要解释的以空字符结尾的字节字符串 |
---|
返回值
若成功,则返回double值对应str的内容。 如果转换后的值超出了返回类型的范围,则返回值未定义。 如果不能执行转换,则返回0.0。
例
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
printf("%g\n", atof(" -0.0000000123junk"));
printf("%g\n", atof("0.012"));
printf("%g\n", atof("15e16"));
printf("%g\n", atof("-0x1afp-2"));
printf("%g\n", atof("inF"));
printf("%g\n", atof("Nan"));
printf("%g\n", atof("1.0e+309")); // UB: out of range of double
printf("%g\n", atof("0.0"));
printf("%g\n", atof("junk")); // no conversion can be performed
}
可能的输出:
-1.23e-08
0.012
1.5e+17
-107.75
inf
nan
inf
0
0
参考
- C11标准(ISO / IEC 9899:2011):
- 7.22.1.1 atof函数(p:341)
- C99标准(ISO / IEC 9899:1999):
- 7.20.1.1 atof函数(p:307)
- C89 / C90标准(ISO / IEC 9899:1990):
- 4.10.1.1 atof函数
扩展内容
strtofstrtodstrtold(C99)(C99) | 将字节字符串转换为浮点值(函数) |
---|
| 用于atof的C ++文档 |
本文档系腾讯云开发者社区成员共同维护,如有问题请联系 cloudcommunity@tencent.com