Home C&C++函数库 c++ 语法 程序源码 Linux C库

strtod

函数   <cstdlib>

double strtod (const char* str, char** endptr);

将字符串转换为double

解析C-string str,将其内容解释为浮点数(根据当前地区),并以double形式返回其值。
如果endptr不是空指针,该函数还将endptr的值设置为指向数字后面的第一个字符。

函数丢弃所有开头的空格字符(如isspace),直到找到第一个非空格字符。
然后,从这个字符开始,按照类似于浮点字面值的语法(见下面)取尽可能多的有效字符, 并将它们解释为数值。指向最后一个有效字符之后的字符串剩余部分的指针存储在endptr所指向的对象中。

C90(C++98) 使用“C”语言环境的strtod 的有效浮点数由可选符号字符(+或-)和数字序列组成, 可以包含小数点字符(.),可选后跟指数部分(e或E字符后跟可选符号和数字序列)
C99/C11(C++11) 使用“C”语言环境的strtod 的有效浮点数由可选的符号字符(+或-)组成,后面跟着一个:
- 数字序列,可选包含小数点字符(.),可选后跟指数部分(e或E字符后跟一个可选符号和数字序列)。
- 一个0x或0X前缀,然后是一个十六进制数字序列(如isxdigit),可选地包含一个句点,将整数和小数部分分开。 可选后跟2次幂(p或P字符后跟一个可选符号和一个十六进制数字序列)。
- INF或INFINITY(忽略大小写)。
- NAN或NANsequence(忽略大小写),其中sequence是字符序列,每个字符要么是字母数字字符(如isalnum),要么是下划线字符(_)。


如果str中的第一个非空格字符序列不构成刚才描述的有效浮点数, 或者由于str为空或只包含空格字符而不存在这样的序列,则不执行转换,函数返回一个零值。

☲  参数


str
以浮点数表示开头的c字符串。

endptr
对已经分配的char*类型对象的引用,该对象的值由函数设置为数值后的str中的下一个字符。
这个参数也可以是一个空指针,在这种情况下它不会被使用。

☉  返回值



如果成功,该函数将转换后的浮点数作为double类型的值返回。

如果不能执行有效的转换,则函数返回0(0.0)。

如果正确的值超出了该类型的可表示值的范围,则返回一个正的或负的HUGE_VAL, 并将errno设置为ERANGE。

C90(C++98) 如果正确的值会导致下溢,则函数返回一个大小不大于最小正数,并将errno设置为ERANGE。
C99/C11(C++11) 如果正确的值会导致下溢,则函数返回一个大小不大于最小的正数, (在这种情况下,一些库实现也可能将errno设置为ERANGE)。


☣  示例



/* strtod example */
#include <stdio.h>      /* printf, NULL */
#include <stdlib.h>     /* strtod */

int main ()
{
  char szOrbits[] = "365.24 29.53";
  char* pEnd;
  double d1, d2;
  d1 = strtod (szOrbits, &pEnd);
  d2 = strtod (pEnd, NULL);
  printf ("The moon completes %.2f orbits per Earth year.\n", d1/d2);
  return 0;
}

输出:
The moon completes 12.37 orbits per Earth year

↭  数据竞争



str指向的数组被访问,endptr指向的指针被修改(如果不是null)。

❆  异常(c++)



无抛出保证:此函数从不抛出异常。
如果str没有指向有效的C-string,或者endptr没有指向有效的指针对象,将导致未定义的行为。

🍄  另请参阅



strtol 将字符串转换为long integer(function )
strtoul 将字符串转换为unsigned long integer (function )
atof 将字符串转换为 double (function )

联系我们 免责声明 关于CandCplus 网站地图