Запись значения типа 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;
}