科学的“d”符号不能在c++中读取
Scientific `d` notation not read in C++
我需要读取一个数据文件,其中数字以如下格式写入:
1.0d-05
c++似乎不承认这种科学记数法!关于我如何读取/转换这些类型的数字有什么想法吗?
我需要数字(即double
/float
)而不是字符串。也许已经有一个类/头来管理这种格式,但我找不到它。
Fortran程序生成的文件使用字母D而不是e来报告双精度数(科学记数法)
所以你的选项是:
- 预处理Fortran数据文件(一个简单的Search and Replace就足够了)
-
使用如下格式:
#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格式的数字)。
相关文章:
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 为什么我的for循环不能正确获取argv
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- 为什么我不能在 FOR LOOP 中使用 i/10,C++?
- 为什么我不能在不创建字符串变量的情况下使用函数的字符串输出
- 为什么模板类中的对象不能返回值
- 为什么我不能在一个类的不同行中声明和定义成员变量?
- 为什么我不能在 C++ 中的特定函数重载中调用同一函数的任何其他重载?
- ld:bind_at_load和-bitcode_bundle(Xcode设置ENABLE_bitcode=YES)不能
- 数组长度,为什么从命令行获取时不能使用它?
- Windows/Cygwin - 不能使用 pybind11 - 犯错误
- 为什么我不能使用 EGL 创建无头 OpenGl 上下文?
- 递归模板化函数不能分配给具有常量限定类型"const tt &"的变量"state"
- 为什么我不能将一个对象push_back到属于另一个类的对象向量中?
- 为什么我不能将 rand() 与数组的大小一起使用?
- 为什么虚函数不能是静态的和全局的?
- 为什么我不能在 while 循环中创建线程?
- 为什么这个音频包络不能通过开关的情况?
- 不能将复制初始化与隐式转换的多个步骤一起使用