我有一些文件,我想打开它们并读取一些数据。文件名有一个序列:769.999 779.999 789.999 ... 我编写了下面的代码来打开文件,它一直有效,直到文件名为999.999。
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <cmath>
#include <cstdlib>
#include <iomanip>
using namespace std;
string fn, path_str;
string root("/home/mostafa/OpenFOAM/mostafa-2.1.0/run/tutorials/incompressible/pisoFoam/channelLES/Balaras/09/postProcessing/mydata/");
string endfile("/Data0_U_UMean.xy");
int main()
{
float fileName;
std::cout.precision(7);
for (int t=0;t<95;t++)
{
float mydata[210]={0};
fileName=769.999+t*10.000000;
cout << fileName << endl;
string fn = static_cast<ostringstream*>( &(ostringstream() << fileName) )->str();
//string fn = std::to_string(fileName);
path_str=root+ fn+endfile;
const char* path=path_str.c_str();
cout << path << endl;
//myfile.open (path,ios::out);
ifstream myfile(path, fstream::in | fstream::out | fstream::binary);
if (!myfile)
{
cout << "Cannot open file.\n";
return 0;
}
for (int x=0; x<210; x++)
{
myfile >> mydata[x];
//cout << mydata[x] << "\t";
}
myfile.close();
}
return 0;
}
然后对于文件名1009.999,它表示没有这样的文件,实际上它将数字四舍五入为1010。
我的问题是如何防止这种舍入?
此致 Mostafa的
答案 0 :(得分:0)
我认为您需要为 ostringstream 设置精度。例如,替换
ostringstream() << fileName
到
ostringstream() << std::setprecision(7) << fileName;