C++ 将字符串转换为双精度

Posted

技术标签:

【中文标题】C++ 将字符串转换为双精度【英文标题】:C++ Converting a String to Double 【发布时间】:2013-05-25 08:46:43 【问题描述】:

我整天都在努力寻找解决方案!您可能会将其标记为重新发布,但我真正在寻找的是一个不使用 boost lexical cast 的解决方案。传统的 C++ 方法会很棒。我试过这段代码,但它返回一组乱码数字和字母。

string line; 
double lineconverted;

istringstream buffer(line);
lineconverted;
buffer >> lineconverted;

我也试过这个,但它总是返回 0。

stringstream convert(line);
if ( !(convert >> lineconverted) ) 
    lineconverted  = 0;

提前致谢:)

编辑:对于我使用的第一个解决方案(胡言乱语).. 这是一个快照

【问题讨论】:

“乱码数字和字母”,都在一个双变量中?怎么样? line的内容是什么? 双精度值“50000” @MD.Unicorn 我贴了一张照片 图片中的那个“乱码”不是乱码,是表示一个很小的数字的一种方式:en.wikipedia.org/wiki/Scientific_notation#E_notation当然不是你真正想要的数字。 【参考方案1】:
#include <sstream>

int main(int argc, char *argv[])

    double f = 0.0;

    std::stringstream ss;
    std::string s = "3.1415";

    ss << s;
    ss >> f;

    cout << f;

好消息是,此解决方案也适用于其他解决方案,例如 int 等。

如果你想重复使用同一个缓冲区,你必须在两者之间做ss.clear

还有一个更短的解决方案,您可以将值初始化为字符串流并同时将其刷新为双精度:

#include <sstream>
int main(int argc, char *argv[])
   stringstream("3.1415")>>f ;

【讨论】:

【参考方案2】:

从 C++11 开始,您可以使用 std::stod 函数:

string line; 
double lineconverted;

try

    lineconverted = std::stod(line);

catch(std::invalid_argument)

    // can't convert

std::stringstream 的解决方案也正确:

#include <sstream>
#include <string>
#include <iostream>

int main()

    std::string str;
    std::cin >> str;
    std::istringstream iss(str);
    double d = 0;
    iss >> d;
    std::cout << d << std::endl;
    return 0;

【讨论】:

你确定你启用了 C++11 吗? 我是 C++ 新手,请赐教'如何' :) @PJ_Boy:你在使用 MSVS 吗?什么版本? @PJ_Boy,很好。阅读this,它可以帮助你。 使用 gcc 编译器的尝试获取它的版本 -- 并搜索它是否支持 C++11 (c++0x)。【参考方案3】:

如果您想存储(例如存储到向量)一行的所有双精度数

#include <iostream>
#include <vector>
#include <iterator>

int main()


  std::istream_iterator<double> in(std::cin);
  std::istream_iterator<double> eof;
  std::vector<double> m(in,eof);

  //print
  std::copy(m.begin(),m.end(),std::ostream_iterator<double>(std::cout,"\n"));


【讨论】:

以上是关于C++ 将字符串转换为双精度的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 stringstream 在 C++ 中将字符串转换为双精度值 [关闭]

尝试在 C++ 中将字符串转换为双精度时遇到分段错误

在 C++ 中将字符串转换为双精度

如何在 C++ 中将字符串转换为双精度值?

使用 '%' 将字符串转换为双精度

将字符串转换为双精度 [重复]