C++ std::stof

17 Mar 2025 | 4 分钟阅读

C++ 是一种强大而适应性强的语言,可用于各种领域的编程,包括系统编程、游戏开发以及介于两者之间的所有内容。C++ 具有许多用于将文本转换为数值以及反之的功能,以有效地处理数值数据。其中,std::stofstring 转换为浮点数的能力使其脱颖而出。

什么是 std::stof?

C++11 标准引入了 C++ 标准库函数 std::stof。它主要用于将表示浮点数的字符串转换为其数值等效项,即 float 类型。它是 <string> 头文件的一个组成部分。当您需要解析用户输入、配置文件或外部数据时,它特别有用。

函数签名

让我们剖析一下参数

  • 您希望转换的输入字符串称为 str
  • idx 指向一个 size_t。转换停止的位置由这个可选参数决定。如果 idx 留空或设置为 nullptr,函数将不会返回此信息。

示例

让我们举一个例子来说明 C++ 中 std::stof 函数 的使用。

输出

std::stof in C++

处理 std::stof 中的错误:-

尽管 std::stof 是解析浮点数的有用工具,但重要的是要了解转换过程中可能出现的一些问题。

在使用用户输入或外部数据时,应预料到以下情况

无效数据

当输入字符串表示无效的浮点数时,std::stof 将抛出 std::invalid_argument 类型的异常。

  • 在这种情况下,代码将处理异常并向控制台输出错误消息。

溢出或下溢

如果输入字符串中的值大于 float 可以容纳的范围,则可能会出现溢出下溢问题。在这些情况下,Std::stof 将引发 std::out_of_range 类型的异常。

  • 字符串 "1e40" 太长,无法表示为 float,因此此代码在尝试转换时会抛出异常。
  • 为了有效地管理这些情况,将您的 standard::stof 调用包装在 try-catch 块中是一个好主意,如上述示例所示。

处理空格和其他字符

std::stof 的目的是转换与实浮点整数对应的字符串。另一方面,它对字符串中的一些额外字符以及前导和尾随空格相当宽容。

  • 在这里,std::stof 将成功地从字符串中提取数值 42.42,它将忽略前导和尾随空格。
  • 同样,std::stof 将处理字符串中的正负号
  • posNumbernegNumber 中都将包含准确的数值 42.42 和 -42.42。
  • 重要的是要记住,std::stof 无法处理其他非数字字符,包括逗号和货币符号。如果使用这些字符,转换将失败并抛出 std::invalid_argument 异常。

示例程序

让我们举一个例子来说明 C++ 中 std::stof 函数 的使用。

输出

std::stof in C++