科学的“d”符号不能在c++中读取

Scientific `d` notation not read in C++

本文关键字:不能 c++ 读取 符号      更新时间:2023-10-16

我需要读取一个数据文件,其中数字以如下格式写入:

1.0d-05

c++似乎不承认这种科学记数法!关于我如何读取/转换这些类型的数字有什么想法吗?

我需要数字(即double/float)而不是字符串。也许已经有一个类/头来管理这种格式,但我找不到它。

Fortran程序生成的文件使用字母D而不是e来报告双精度数(科学记数法)

所以你的选项是:

  1. 预处理Fortran数据文件(一个简单的Search and Replace就足够了)
  2. 使用如下格式:

    #include <iostream>
    #include <sstream>
    #include <string>
    #include <vector>
    int main()
    {
      std::istringstream input("+1.234000D-5 -2.345600D+0 +3.456700D-2");
      std::vector<double> result;
      std::string s;
      while (input >> s)
      {
        auto e(s.find_first_of("Dd"));
        if (e != std::string::npos)
          s[e] = 'E';
        result.push_back(std::stod(s));
      }
      for (auto d : result)
        std::cout << std::fixed << d << std::endl;
      return 0;
    }
    

:

  • 看看使用"D"读取ASCII数字而不是"科学记数法使用C(它是C,但你明白的意思);
  • 仔细检查输入文件,因为Fortran可以删除'E'/'D'(参见对于三位数指数Fortran会删除'E'和如何在c++中读取FORTRAN格式的数字)。