c++ - 如何在cpp中将字符串转换为 float

标签 c++

<分区>

我想将字符串转换为 float 。我使用函数 std::atof,但是当我有一个零字符串时,这不起作用,因为如果成功,std::atof 的返回值是 0。 有些字符串不是数字。 为此,我写了这段代码:

  float att_valur_converted;
        att_valur_converted = std::atof(m_pAttr->att_value);
        if (att_valur_converted != 0.0){      
        sprintf(m_pAttr->att_value,"%.2f", att_valur_converted);

这不适用于零。 我该怎么做才能使零工作? 谢谢。

最佳答案

使用std::stod如果您有权访问 C++11,则可以执行此类操作。

否则使用 std::stringstream 如下:

double f = 0.0;    
std::stringstream ss;
std::string s = "213.1415";    
ss << s;
ss >> f;  //f now contains the converted string into a double  
cout << f; 

当然,在这两种情况下,您都必须处理此类转换可能失败的事实,例如,如果您尝试以“blablabla”作为输入调用 stod

我建议的两种方法以两种不同的方式处理这种情况:

  1. stod 抛出一个你可以捕获的异常
  2. sstream 设置一个标志,您可以使用 bool ss.good() 进行查询。 good 如果转换成功则返回 true,否则返回 false。

关于c++ - 如何在cpp中将字符串转换为 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55631412/

相关文章:

c++ - 永远不会终止的程序是有效的 C++ 程序吗?

C++ 使用 CRTP 检测 friend 类的私有(private)成员

java - 无法在 C++ 中编写相同的 Java 代码,因为 "cannot initialize class member here"错误

c++ - C++中的内存分配和继承类

C++ 初学者 - 简单的代码块崩溃,原因不明

c++ - 如何编写将自身作为回调传递的匿名函数/lambda?

c++ - 两个程序的运行时间分别运行然后一起运行

c++ - STM32F767ZI 外部中断处理

c++ - 无法使 <random> 库正常工作

c++ - 列表初始化的 char 数组是否仍然以 null 结尾?