У меня есть такой .txt файл с сотнями строк:
109787.3634 108234.1301 106952.8345 1.0000
110010.6294 108250.4733 106975.6766 1.0000
110243.5609 108312.5631 106999.9469 1.0000
110482.4885 108382.7281 107025.0583 1.0000
110724.3577 108461.8582 107051.2432 1.0000
Я хочу данные в первых 3 столбцах
Значения разделяются вкладками после копирования из Excel (я также пытался сохранить данные Excel в формате CSV, но у меня возникла та же проблема, что описана ниже).
Это мой код для импорта данных, заимствованных из разных источников:
#include <fstream>
#include <sstream>
#include <iostream>
using namespace std;
int main()
{
double data[360][3];
ifstream file("tsv.txt");
for(int row = 0; row < 360; ++row)
{
string line;
getline(file, line);
if ( !file.good() )
break;
stringstream iss(line);
for (int col = 0; col < 3; ++col)
{
string val;
getline(iss, val, '\t');
if ( !iss.good() )
break;
stringstream convertor(val);
convertor >> data[row][col];
}
}
for (int i = 0; i<360 ; ++i)
{
for (int j = 0; j<3 ; ++j)
{
cout << data[i][j] << " ";
}
cout << endl;
}
system("PAUSE");
return 0;
}
Код извлекает данные и сохраняет их в массиве. Однако все десятичные разряды теряются, и cout возвращает это (обратите внимание, что округления нет):
109787 108234 106952
110010 108250 106975
110243 108312 106999
110482 108382 107025
110724 108461 107051
Все эти данные были скопированы в текстовый файл непосредственно из Excel, и ячейки отформатированы как «число» с 4 десятичными знаками. Я попробовал тот же пример с файлом CSV, и то же самое происходит. Если я вручную введу значения в текстовый или CSV-файл, он сохранит десятичное число, но при копировании и вставке десятичные знаки теряются. Тем не менее, мне нужно скопировать и вставить, так как у меня есть в общей сложности тысячи точек данных.
Почему я теряю часть своих данных, когда они импортируются в C ++?