gpt4 book ai didi

c++ - 将 csv 文件读取为 double vector

转载 作者:行者123 更新时间:2023-11-30 03:20:03 26 4
gpt4 key购买 nike

我正在尝试读取这个 csv 文件,我们称它为“file.csv”,我正在尝试将其放入 的 vector 中双

csv 包含如下数字:

755673.8431514322,
684085.6737614165,
76023.8121728658,
...

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

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);
}
}

最佳答案

How to read the whole digits without throwing any of it.

正如评论中提到的@user4581301,我猜你错过了std::setprecision()输出时。

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

话虽这么说,std::stold 的使用将通过抛出 std::invalid_argument 来确保不会有错误的 vector 输入。 异常,如果从 stringdouble 的转换不成功。 (感谢@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;
}

关于c++ - 将 csv 文件读取为 double vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53142798/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com