C

strtold

strtof, strtod, strtold

在头文件中定义
float strtof(const char * restrict str,char ** restrict str_end);(自C99以来)
double strtod(const char * str,char ** str_end);(直到C99)
double strtod(const char * restrict str,char ** restrict str_end);(自C99以来)
long double strtold(const char * restrict str,char ** restrict str_end);(自C99以来)

解释str指向的字节串中的浮点值。

函数放弃任何空白字符(由std::isspace()决定),直到找到第一个非空白字符。然后,它需要尽可能多的字符来形成有效的浮点表示并将它们转换为浮点值。有效的浮点值可以是以下值之一:

  • 十进制浮点表达式。它由以下部分组成:

这些函数将str_end指向的指针设置为指向经过最后解释的字符的字符。 如果str_end是NULL,它将被忽略。

参数

str-指向要解释的以空字符结尾的字节字符串
str_end-指向字符的指针。

返回值

浮点值对应str的成功内容。 如果转换后的值超出相应返回类型的范围,则会发生范围错误,并返回HUGE_VAL,HUGE_VALF或HUGE_VALL。 如果不能执行转换,则返回0。

#include <stdio.h> #include <errno.h> #include <stdlib.h> int main(void) { // parsing with error handling const char *p = "111.11 -2.22 Nan nan(2) inF 0X1.BC70A3D70A3D7P+6 1.18973e+4932zzz"; printf("Parsing '%s':\n", p char *end; for (double f = strtod(p, &end p != end; f = strtod(p, &end)) { printf("'%.*s' -> ", (int)(end-p), p p = end; if (errno == ERANGE){ printf("range error, got " errno = 0; } printf("%f\n", f } // parsing without error handling printf("\" -0.0000000123junk\" --> %g\n", strtod(" -0.0000000123junk", NULL) printf("\"junk\" --> %g\n", strtod("junk", NULL) }

可能的输出:

Parsing '111.11 -2.22 Nan inF 0X1.BC70A3D70A3D7P+6 1.18973e+4932zzz': '111.11' -> 111.110000 ' -2.22' -> -2.220000 ' Nan' -> nan ' nan(2)' -> nan ' inF' -> inf ' 0X1.BC70A3D70A3D7P+6' -> 111.110000 ' 1.18973e+4932' -> range error, got inf " -0.0000000123junk" --> -1.23e-08 "junk" --> 0

参考

  • C11标准(ISO / IEC 9899:2011):

扩展内容

ATOF将字节字符串转换为浮点值(函数)
wcstofwcstodwcstold(C99)(C95)(C99)将宽字符串转换为浮点值(函数)

| 用于strtof,strtod,strtold的C ++文档 |