Запись значения типа double в текстовый файл

приведенный ниже код записывает нечитаемые символы в текстовый файл:

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

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

        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;
}

это производит putput: 11.2344 в то время как фактическое число 11.23444556. Мне нужен полный номер.

редактирование сообщения, чтобы уведомить всех: Этот нечитаемые символы обусловлены функцией записи ofstream:

Это неформатированная функция вывода

эта цитата из: http://www.cplusplus.com/reference/iostream/ostream/write/

4 ответов


почему бы вам просто не сделать это (обновленный ответ после редактирования в вопросе):

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

Теперь, вы можете увидеть фактическое число, записанное в файл.

см. документацию std::setprecision. Обратите внимание, что вы должны включить <iomanip> файл заголовка и посмотреть, как он работает:http://www.ideone.com/XNZjK


здесь проще использовать операторы потока:

#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;
}

дает вам то, чего вы хотите.


вы можете записать значение в файл, как это:

myfile << value;

использование адреса value в качестве параметра strcat развращает ваш стек, так как strcat ожидает 0-завершенную c-строку в качестве первого аргумента (и фактически выделенное пространство).


другие предложили лучшие способы, но если вы действительно хотите это сделать, указатель должен быть приведен для преобразования 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, "");
    //myfile.write (*conversion, strlen (conversion));
    myfile << *(reinterpret_cast<double *>(conversion));
    myfile.close();
  }
  return 0;
}