ofstream输出字符串/字符而不是双倍

时间:2013-10-17 14:16:41

标签: c++ string double ofstream

我有一些前员工开发的C ++代码。 我正在尝试澄清/测试一些软件结果。 在中间步骤中,软件会保存带有结果的“二进制”dat文件,该文件稍后会被软件的其他部分导入。

我的目标是将此输出从“二进制”更改为人类可读数字。

定义输出文件:

ofstream pricingOutputFile;
double *outputMatrix[MarketCurves::maxAreaNr];
ofstream outputFile[MarketCurves::maxAreaNr];

写步骤是这样的:

 pricingOutputFile.write((char *)&outputMatrix[area], sizeof(double));

矩阵充满'双打'

有没有办法改变它以输出人类可读的文件?

我尝试了各种std::string cout和其他方法'googled',但直到现在还没有成功。

用<<<<<<<但是这给出了以下错误:     错误C2297:'<<' :非法,右操作数类型为'double'

sugestions她把我推到了正确的轨道上:

sprintf_s(buffer, 10, "%-8.2f", rowPos);
pricingOutputFile.write((char *)&buffer, 10);

灵感来自于: http://www.tenouk.com/cpluscodesnippet/usingsprintf_s.html

感谢您的帮助

3 个答案:

答案 0 :(得分:1)

在此代码中,double占用的内存被转储到文件中

pricingOutputFile.write((char *)&outputMatrix[area], sizeof(double));

要生成人类可读,您需要使用重载运算符<< :

pricingOutputFile << outputMatrix[area];

答案 1 :(得分:0)

sugestions她把我推到了正确的轨道上:

sprintf_s(buffer,10,“%-8.2f”,rowPos); pricingOutputFile.write((char *)&amp; buffer,10);

灵感来自:http://www.tenouk.com/cpluscodesnippet/usingsprintf_s.html

答案 2 :(得分:0)

你可以内联这个:

pricingOutputFile << std::fixed
                  << std::setw(11)
                  << std::setprecision(6)
                  << std::setfill('0')
                  << rowMin;

但这非常迫切。我总是希望尽可能地保持陈述。一个简单的方法是:

 void StreamPriceToFile(ofstream & output, const double & price) const
 {
      output << std::fixed
             << std::setw(11)
             << std::setprecision(6)
             << std::setfill('0')
             << price;
 }

 //wherever used
 StreamPriceToFile(pricingOutputFile, rowMin);

但更好(在我看来)会是这样的:

 //setup stream to receive a price
 inline ios_base& PriceFormat(ios_base& io)
 {
      io.fixed(...);
      ...
 }

 //wherever used
 pricingOutputFile << PriceFormat << rowMin;

我的C ++非常生疏,或者我填写了PriceFormat。