将double类型值写入文本文件

时间:2011-06-03 10:58:45

标签: c++ pointers file-io

以下代码将不可读的字符写入文本文件:

int main () 
{
    ofstream myfile ("example.txt");

    if (myfile.is_open())
    {
        double value       = 11.23444556;
        char   *conversion = (char *)&value;
        strcat (conversion, "\0");

        myfile.write (conversion, strlen (conversion));
        myfile.close();
    }   

    return 0;
}

我想看到文件中写的实际数字:(请提示。

修改 看到下面的答案,我将代码修改为:

int main () 
{
    ofstream myfile ("example.txt");

    if (myfile.is_open())
    {
        double value       = 11.23444556;

        myfile << value;
        myfile.close();
    }   

    return 0;
}

这会产生投注: 11.2344 ,而实际数字 11.23444556 。我想要完整的号码。

编辑帖子以通知所有人: 不可读的字符是由于ofstream的写入功能:

  

这是一个未格式化的输出函数

此引用来自:http://www.cplusplus.com/reference/iostream/ostream/write/

4 个答案:

答案 0 :(得分:26)

为什么不简单地这样做(在问题编辑后更新答案):

 #include <iomanip>

 myfile << std::fixed << std::setprecision(8) << value;
 myfile.close();

现在,您可以看到文件中写入的实际数字。

请参阅std::setprecision的文档。注意:您必须包含<iomanip>标头文件。

答案 1 :(得分:3)

这里使用流操作符更容易:

#include <iostream>
#include <fstream>
#include <string.h>
using namespace std;

int main () 
{
    ofstream myfile ("example.txt");

    if (myfile.is_open())
    {
        double value       = 11.23444556;

        myfile << value;
        myfile.close();
    }   

    return 0;
}

给你你想要的东西。

答案 2 :(得分:1)

其他人提出了更好的方法但是如果你真的想要这样做,那么应该使用强制转换将char *转换为double *,反之亦然

#include <iostream>
#include <fstream>
#include <string>
#include <cstring>
using namespace std;

int main () 
{
  ofstream myfile ("example.txt");
  if (myfile.is_open())
  {
    double value       = 11.23444556;
    char     *conversion = reinterpret_cast<char *>(&value);
    strcat (conversion, "\0");
    //myfile.write (*conversion, strlen (conversion));
    myfile << *(reinterpret_cast<double *>(conversion));
    myfile.close();
  }
  return 0;
}

答案 3 :(得分:0)

您可以将值写入文件,如下所示:

myfile << value;

使用value的地址作为参数strcat会破坏您的堆栈,因为strcat期望以0结尾的c-string作为第一个参数(并且实际分配空间)。