将数字写入更精确的文件 - C ++

时间:2011-07-18 12:43:13

标签: c++ file-io precision

我将一些参数(所有类型double)写入一个文件,用于执行一些复杂的计算。我将参数写入文件中,如下所示:

refStatsOut << "SomeParam:" << value_of_type_double << endl;
其中refStatsOutofstream参数。有四个这样的参数,每个参数都是double类型。我认为写入文件的内容与实际值不同(就精度损失而言)。例如,如果value_of_type_double的值为-28.07270379934792,那么我在文件中看到的内容是-28.0727。

此外,一旦计算和编写了这些统计数据,我就会运行使用这些统计数据的不同程序。读取文件并将值初始存储为std::strings,然后通过double函数转换为atof。这导致我在上面显示的值并进一步破坏计算。

我的问题是:
1.有没有办法提高分辨率,可以将值(double类型等)写入文件,以免失去任何精度?
2.这也可能是std::string doubleatof转换的问题吗?如果是这样,我可以用什么其他功能来解决这个问题?

P.S:如果这个问题的一些细节不清楚,请告诉我。我将尝试更新它们并提供更多详细信息。

3 个答案:

答案 0 :(得分:4)

您可以使用 setprecision 功能。

答案 1 :(得分:3)

ofstream your_file;

你可以使用your_file.precision(X);

precision()和setPrecision()之间的主要区别在于precision返回当前精度而setPrecision没有。因此,您可以使用这样的精度。

streamsize old_precision = your_file.precision(X);
// do what ever you want

//restore precision
your_file.precision(old_precision);

答案 2 :(得分:1)

double基本上是64位整数,如果你想要一种廉价的写法,你可以这样做(注意我假设你的编译器使用long 64位整数)

double value = 32985.932235;
long *saveme = (long*)&value;

请注意,如果加载回不同的架构,保存的值可能不会保持不变。