正在将csv文件读取为双精度矢量

Reading csv file to vector of doubles

本文关键字:双精度 读取 文件 csv      更新时间:2023-10-16

我正在尝试读取这个csv文件,让我们称它为"file.csv",我正在尝试将它放入double的向量中。

csv包含以下数字:

755673.8431514322,
684085.6737614165,
76023.8121728658, 
...

我尝试使用stringstream,它成功地将这些数字输入到向量中,但输入的数字与我想要的不一样。相反,输入的数字是

7556373, 684085, 76023.8

我怎么能在不扔掉任何数字的情况下读取整个数字?

这是我的代码

vector<long double> mainVector;
int main() 
{
ifstream data;
data.open("file.csv");
while (data.good()) 
{
string line;
stringstream s;
long double db;
getline(data, line, ',');
s << line;
s >> db;
mainVector.push_back(db);
}
}

如何在不抛出任何数字的情况下读取整个数字。

正如评论中提到的@user4581301,我猜您在输出时缺少std::setprecision((。

但是,您不需要std::stringstream来完成此工作。使用std::stoldline(这是一个字符串(直接转换为double,并直接放入向量中,如下所示。

也就是说,如果从stringdouble的转换不成功,则使用std::stold将通过抛出std::invalid_argument异常来确保向量没有错误输入。(计入@user4581301(

#include <iostream>
#include <fstream>
#include <vector>  // std::vector
#include <string>  // std:: stold
#include <iomanip> // std::setprecision
int main()
{
std::vector<long double> mainVector;
std::ifstream  data("file.csv");
if(data.is_open())
{
std::string line;
while(std::getline(data, line, ','))
mainVector.emplace_back(std::stold(line));
}
for(const auto ele: mainVector)
std::cout << std::setprecision(16) << ele << std::endl;
// ^^^^^^^^^^^^^^^^^^^^ 
return 0;
}