将 csv 文件读取为双精度向量
Reading csv file to vector of doubles
我正在尝试读取这个 csv 文件,我们称它为“file.csv
”,我正在尝试将其放入 [=14] 的向量中=].
此 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);
}
}
How to read the whole digits without throwing any of it.
正如评论中提到的@user4581301,我猜你在输出时缺少 std::setprecision() 。
但是,您不需要 std::stringstream
来完成这项工作。使用 std::stold 将 line
( 是一个字符串直接转换为 double
并直接放入向量中,如下所示。
也就是说,如果转换从 string 到 double 不成功。 (感谢@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;
}
我正在尝试读取这个 csv 文件,我们称它为“file.csv
”,我正在尝试将其放入 [=14] 的向量中=].
此 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);
}
}
How to read the whole digits without throwing any of it.
正如评论中提到的@user4581301,我猜你在输出时缺少 std::setprecision() 。
但是,您不需要 std::stringstream
来完成这项工作。使用 std::stold 将 line
( 是一个字符串直接转换为 double
并直接放入向量中,如下所示。
也就是说,如果转换从 string 到 double 不成功。 (感谢@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;
}