Почему, когда я храню DATA двойного значения в массиве char, если я получаю данные из массива char в другой double, он возвращает значение Float?
В этом:
double vals = 3.141592654;
char xvals[sizeof(vals)];
memcpy(&xvals, &vals, sizeof(xvals));
double y;
memcpy(&y, &xvals, sizeof(xvals));
std::cout<<y<<"\n";
ВЫХОД: 3.14159
Он не "возвращает значение float": std::cout
будет просто не печатать все эти цифры по умолчанию.
вы можете использовать std::setprecison
(из <iomanip>
), чтобы изменить количество цифр для печати:
#include <iostream>
#include <iomanip>
int main()
{
double vals = 3.141592654;
std::cout << vals << "\n";
std::cout << std::setprecision(10);
std::cout << vals;
return 0;
}
Вывод:
3,14159
3,141592654
Не было потери данных или принудительной конверсии. По умолчанию точность для cout
равно 6. Это даст вам ответ, то вам
std::cout<<std::setprecision(10)<<y<<"\n";
EDIT: вам нужно включить заголовок <iomanip>
для std::setprecision
.
double vals = 3.141592654; std::cout<<vals <<"\n";
Распечатать?float
? ISTM просто округляется для вывода.