Namespaces
Variants

std::stof, std::stod, std::stold

来自 zh.cppreference.net
 
 
 
std::basic_string
 
定义于头文件 <string>
float       stof ( const std::string& str, std::size_t* pos = nullptr );
(1) (C++11 起)
float       stof ( const std::wstring& str, std::size_t* pos = nullptr );
(2) (C++11 起)
double      stod ( const std::string& str, std::size_t* pos = nullptr );
(3) (C++11 起)
double      stod ( const std::wstring& str, std::size_t* pos = nullptr );
(4) (C++11 起)
long double stold( const std::string& str, std::size_t* pos = nullptr );
(5) (C++11 起)
long double stold( const std::wstring& str, std::size_t* pos = nullptr );
(6) (C++11 起)

解释字符串 str 中的浮点值。

令 ptr 为一个内部(转换函数内)指针,其类型为 char* (1,3,5) 或 wchar_t* (2,4,6),相应而定。

1) 调用 std::strtof(str.c_str(), &ptr).
2) 调用 std::wcstof(str.c_str(), &ptr).
3) 调用 std::strtod(str.c_str(), &ptr).
4) 调用 std::wcstod(str.c_str(), &ptr).
5) 调用 std::strtold(str.c_str(), &ptr).
6) 调用 std::wcstold(str.c_str(), &ptr).

函数丢弃所有空白符(由 std::isspace 确定),直到找到第一个非空白符。然后它取尽可能多的字符以构成有效的浮点数表示,并将其转换为浮点值。有效的浮点值可以是以下之一:

  • 十进制浮点数表达式。由以下部分组成:
  • (可选) 正负号
  • 非空十进制数字序列,可选地包含小数点字符(由当前 C 本地环境 确定)(定义有效数)
  • (可选) e 或 E 后跟可选的负号或正号以及非空十进制数字序列(定义基数为 10 的指数)
  • 十六进制浮点数表达式。由以下部分组成:
  • (可选) 正负号
  • 0x 或 0X
  • 非空十六进制数字序列,可选地包含小数点字符(由当前 C 本地环境 确定)(定义有效数)
  • (可选) p 或 P 后跟可选的负号或正号以及非空十进制数字序列(定义基数为 2 的指数)
  • 无穷表达式。由以下部分组成:
  • (可选) 正负号
  • INF 或 INFINITY 不区分大小写
  • 非数值表达式。由以下部分组成:
  • (可选) 正负号
  • NAN 或 NAN(char_sequence ) 不区分 NAN 部分的大小写。char_sequence 只能包含数字、拉丁字母和下划线。结果是一个安静的 NaN 浮点值。
  • 当前安装的 C 本地环境 可能接受的任何其他表达式。

如果 pos 不是空指针,则 ptr 将接收 str.c_str() 中第一个未转换字符的地址,并将计算该字符的索引并存入 *pos,给出转换已处理的字符数。

参数

str - 要转换的字符串
pos - 用于存储已处理字符数的整数地址

返回值

转换为指定浮点类型的字符串。

异常

std::invalid_argument 若无法执行任何转换。

若转换后的值超出结果类型的范围,或底层函数( std::strtof 、 std::strtod 或 std::strtold )将 errno 设置为 ERANGE ,则抛出 std::out_of_range 。

示例

缺陷报告

下列行为变更缺陷报告被追溯应用于先前发布的C++标准。

缺陷报告 适用范围 发布时的行为 正确行为
LWG 2009 C++11 若转换值超出结果类型范围时
不会抛出 std::out_of_range 异常
将会抛出异常
LWG 2403 C++11 stof 调用的是 std::strtod 或 std::wcstod stof 调用 std::strtof 或 std::wcstof

参见

(C++11) (C++11) (C++11)
将字符串转换为有符号整数
(函数)
(C++11) (C++11)
将字符串转换为无符号整数
(函数)
(C++17)
将字符序列转换为整数或浮点数值
(函数)