C++字符串流转换为带有运算符的双精度>>

C++ stringstream conversion to double with operator>>

本文关键字:gt 双精度 运算符 字符串 转换 C++      更新时间:2023-10-16

我试图通过重载流输入运算符来读取C++中的列文件。这是读取文件中每一行的主要函数:

#include <fstream>
#include <iostream>
#include <iomanip>
#include <sstream>
#include <string>
#include <vector>
using namespace std;
typedef vector <double> record_t;
istream& operator >> ( istream& ins, record_t& record )
{
  record.clear();
  string line;
  getline( ins, line );
  stringstream ss( line );
  double f;
  while (ss >> f)
    record.push_back(f);
  return ins;
}

在大多数情况下效果很好。
但是对于这条线

55000.003520    -0.009740   0.000721    -0.024600   0.000000

第一个字段存储为 55000.0 而不是55000.003520
有什么方法可以让它读取所有有效数字的正确值?

提前感谢您的帮助!

要存档问题的答案:

该号码实际上是正确读入和存储的。OP检查的方式是简单地将其管道传输到cout,默认输出精度非常有限,因此许多数字只是"四舍五入"以进行打印。