Двойные данные, хранящиеся в массиве char, возвращают значение с плавающей запятой

0

Почему, когда я храню 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

  • 5
    Что означает double vals = 3.141592654; std::cout<<vals <<"\n"; Распечатать?
  • 1
    Вы уверены, что он возвращает float ? ISTM просто округляется для вывода.
Показать ещё 1 комментарий
Теги:

2 ответа

5
Лучший ответ

Он не "возвращает значение 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

  • 0
    Оооо, я понял. Поэтому, если я установлю setprecision с другим количеством десятичных знаков, это сделает его постоянным для следующих двойных значений. Ооо, я понял это: D Но что если я получу деление с неизвестными десятичными знаками и захочу это сделать? Как я могу получить количество десятичных знаков в двойном?
  • 1
    Это еще одна задача. Смотрите здесь: stackoverflow.com/questions/9999221/…
3

Не было потери данных или принудительной конверсии. По умолчанию точность для cout равно 6. Это даст вам ответ, то вам

std::cout<<std::setprecision(10)<<y<<"\n";

EDIT: вам нужно включить заголовок <iomanip> для std::setprecision.

  • 0
    Спасибо! : D Вы также должны процитировать, что это включено в <iomanip>: D Спасибо ^ _ ^

Ещё вопросы

Сообщество Overcoder
Наверх
Меню