正在将csv文件读取为双精度矢量
Reading csv file to vector of doubles
我正在尝试读取这个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::stold将line
(这是一个字符串(直接转换为double
,并直接放入向量中,如下所示。
也就是说,如果从string到double的转换不成功,则使用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;
}
相关文章:
- 正在将csv文件读取为双精度矢量
- 为什么 Clang std::ostream 写一个 std::istream 无法读取的双精度?
- 从二进制流中读取时,将双精度变量的地址转换为 char* 意味着什么?
- 如何从char16_t字符串文字中读取双精度?
- 从.txt文件读取到C++中的双精度向量
- 警告:左移计数 >= 在 C++ 中将字节流读取为双精度变量时的类型宽度
- 我想读取文本文件中的所有内容(但文本文件中只有一个双精度值),转换为双精度值并返回值
- 为什么当我使用双精度时,Qt<->Matlab 正确写入和读取我的字节,但存储 uint32 的字节不正确?
- 为什么 i(f)流无法读取双精度
- 从二进制文件中保存的 4 字节双精度读取 8 字节双精度
- 如何从二进制文件中读取双精度并将其保存在向量中
- 有没有办法更有效地将二进制双精度从文件读取到浮点数组中
- 如何在OpenCV中将图像读取为双精度
- 使用 sscanf 读取双精度时忽略"E"
- C++ - 从文件读取到双精度
- C++ 从文本文件中读取,双精度行
- 从C++中的文本文件中逐行读取,如何确保输入是双精度的
- 从文件中读取长双精度,然后写入另一个文件
- 从十六进制数组读取双精度到向量
- 什么更贵?读取或比较整数,双精度