C++ Reference: Standard C++ Library reference: C Library: cstdlib: strtod

C++官网参考链接:https://cplusplus.com/reference/cstdlib/strtod/

函数 
<cstdlib>
strtod
double strtod (const char* str, char** endptr);
将字符串转换为double 
解析C字符串str,将其内容解释为浮点数(根据当前语言环境),并将其值返回为double。如果endptr不是空指针,该函数还将endptr的值设置为指向数字后面的第一个字符。
该函数首先根据需要丢弃尽可能多的空白字符(如在isspace中返回true的字符),直到找到第一个非空白字符。然后,从这个字符开始,按照类似于浮点字面量的语法(见下文)获取尽可能多的有效字符,并将它们解释为数值。指向字符串最后一个有效字符之后的其他部分的指针存储在endptr所指向的对象中。
C90(C++98)
使用"C"语言环境的strtod的有效浮点数由一个可选的符号字符(+或-),后跟一个数字序列,可选地包含一个小数点字符(.),可选地后跟一个指数部分(一个e或E字符后跟一个可选的符号和一个数字序列)组成。
C99/C11(C++11)
使用"C"语言环境的strtod的有效浮点数由一个可选的符号字符(+或-)组成,后跟以下其中之一: 
-一个数字序列,可选地包含一个小数点字符(.),可选地后跟一个指数部分(一个e或E字符后跟一个可选的符号和一个数字序列)。
-一个0x或0X前缀,然后是一个十六进制数字序列(如在isxdigit中返回true的字符),可选地包含一个分隔整数部分和小数部分的句号。后面可选地跟着2的指数幂(一个p或P字符后面跟着一个可选符号和一个十六进制数字序列)。
-INF或INFINITY(忽略大小写)。
-NAN或NANsequence(忽略大小写),其中sequence是字符序列,每个字符要么是字母数字字符(如在isalnum中返回true的字符),要么是下划线字符(_)。
如果str中的第一个非空白字符序列没有像刚才描述的那样形成有效的浮点数,或者由于str为空或只包含空白字符而不存在这样的序列,则不执行转换,函数返回0.0值。

形参
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;
}
输出:

数据竞争
访问由str指向的数组,并修改由endptr指向的指针(如果endptr不是空指针)。 

异常(C++) 
无抛出保证:此函数从不抛出异常。
如果str不指向有效的C字符串,或者endptr不指向有效的指针对象,则会导致未定义的行为

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_40186813

你的能量无可限量。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值