命名空间
变体
操作

std::stof、std::stod、std::stold

来自 cppreference.com
< cpp‎ | string‎ | basic string
 
 
 
std::basic_string
成员函数
元素访问
迭代器
容量
修饰符
搜索
操作
常量
非成员函数
I/O
比较
(直到 C++20)(直到 C++20)(直到 C++20)(直到 C++20)(直到 C++20)(C++20)
数值转换
(C++11)(C++11)(C++11)
(C++11)(C++11)
stofstodstold
(C++11)(C++11)(C++11)
(C++11)
(C++11)
字面量
辅助类
推导指南 (C++17)

 
定义在头文件 <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 区域设置 确定)(定义尾数)
  • (可选) eE 后跟可选的正负号和非空十进制数字序列(定义以 10 为底的指数)
  • 十六进制浮点表达式。它包含以下部分
  • (可选) 正负号
  • 0x0X
  • 非空十六进制数字序列,可选地包含小数点字符(由当前 C 区域设置 确定)(定义尾数)
  • (可选) pP 后跟可选的正负号和非空十进制数字序列(定义以 2 为底的指数)
  • 无穷大表达式。它包含以下部分
  • (可选) 正负号
  • INFINFINITY,忽略大小写
  • 非数表达式。它包含以下部分
  • (可选) 正负号
  • NANNAN(char_sequence),忽略 NAN 部分的大小写。char_sequence 只能包含数字、拉丁字母和下划线。结果是一个静默 NaN 浮点值。
  • 当前安装的 C 区域设置 可能接受的任何其他表达式

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

内容

[编辑] 参数

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

[编辑] 返回值

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

[编辑] 异常

如果无法执行转换,则为 std::invalid_argument

如果转换后的值超出结果类型的范围,或者基础函数(std::strtofstd::strtodstd::strtold)将 errno 设置为 ERANGE,则为 std::out_of_range

[编辑] 示例

[编辑] 缺陷报告

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

DR 应用于 已发布的行为 正确的行为
LWG 2009 C++11 如果转换后的
值会超出结果类型的范围,则不会抛出 std::out_of_range
将会抛出
LWG 2403 C++11 stof 调用 std::strtodstd::wcstod stof 调用 std::strtofstd::wcstof

[编辑] 参见

(C++11)(C++11)(C++11)
将字符串转换为带符号整数
(函数) [编辑]
(C++11)(C++11)
将字符串转换为无符号整数
(函数) [编辑]
将字符序列转换为整数或浮点值
(函数) [编辑]