浮点类型中带小数点的挑战

时间:2014-08-22 16:23:01

标签: string rounding

我有一些文件,我想打开它们并读取一些数据。文件名有一个序列: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的

1 个答案:

答案 0 :(得分:0)

我认为您需要为 ostringstream 设置精度。例如,替换

ostringstream() << fileName

ostringstream() << std::setprecision(7) << fileName;