atof函数
概要:
#include <stdlib.h> double atof(const char *nptr);
描述:
该函数将参数nptr指向字符串的初始部分转换为double类型的浮点表示。
该函数等价于:
strtod(nptr, (char **)NULL)
区别在于发生错误时,atof函数不影响errno值。
该函数首先将字符串分成三个部分:
1、一个初始的,可能为空的,空格字符(可以使用isspace函数检查。)序列;
2、一个类似浮点常量,或者表示无穷大或者非数值的主题序列;
3、由一个或者多个未识别字符组成的最终字符串(final string),包括字符串末尾的终止空字符;
然后尝试将主题序列转换为浮点数,并返回结果。
主题序列的预期形式可能包含+号或者-号,其后应为下述形式之一:
- 一个由十进制数构成的非空序列(可能包含小数点。),其后还可能包含ISO/IEC 9899:2018标准第6.4.4.2 Floating constants节中定义的指数部分;
- 一个以0x或者0X开头,由十六进制数构成的非空序列(可能包含小数点。),其后还可能包含ISO/IEC 9899:2018标准第6.4.4.2 Floating constants节中定义的二进制指数部分;
- INF或者INFINITY(忽略大小写。);
- NAN或者NAN(n-char-sequenceopt)(其中NAN部分忽略大小写。),n-char-sequenceopt由具体实现定义。
主题序列从第一个非空格字符开始,应包含符合上述形式的尽可能多的字符。如果字符串不符合上述预期形式,主题序列将不包含任何字符。
如果主题序列具有浮点数的预期形式,以第一个数字字符或者小数点字符(以先出现者为准。)开始的字符序列根据ISO/IEC 9899:2018标准第6.4.4.2 Floating constants节的规则解释为浮点常量;除了小数点字符用于代替句号,并且如果指数部分和小数点字符都没有出现在十进制浮点数中,或者如果二进制指数部分没有出现在十六进制浮点数中,具有0值的适当类型的指数部分假定在字符串的最后一个数字之后。
如果主题序列以-号开始,序列会被解释为取反(注:ISO/IEC 9899:2018标准并未明确规定以-号开始的序列是直接转换成负数,还是通过转换相应的无符号序列产生的值取反;如果舍入方向是正无穷大或者负无穷大,这两种方法可能会产生不同的结果。无论哪种情况,如果浮点算术支持带符号的0,函数将遵循0的符号。)。
如果可以使用返回类型表示,字符序列INF或者INFINITY解释为无穷大;否则字符序列INF或者INFINITY对于返回类型而言就像一个非常大的浮点常量。
如果返回类型支持,字符序列NAN或者NAN(n-char-sequenceopt)解释为安静非数值(quiet NaN);否则字符序列NAN或者NAN(n-char-sequenceopt)就像不具有预期形式的主题序列部分,n-char-sequenceopt的含义由实现定义。
如果主题序列具有十六进制形式,并且FLT_RADIX是2的幂,转换得到的值能够正确地舍入。非“C”语言环境中,还可以接受特定语言环境的主题序列。
如果主题序列为空或者不符合预期形式,将不进行任何转换。
参数:
指向被转换的字符串的指针。
返回值:
函数返回转换后的值;如果没有发生转换,函数返回0.0。
范例:
|
|
输出:
number: 3.140000
相关内容:
strtof | 将字符串转换为float类型浮点数的函数。 |
strtold | 将字符串转换为long double类型浮点数的函数。 |
strtod | 将字符串转换为double类型浮点数的函数。 |