(C++) std::istringstream читает до 6 цифр от строки до двойной

Люди! Я боролся с этой проблемой в течение некоторого времени, и до сих пор я не нашел ее решения.

В приведенном ниже коде я инициализирую строку с номером. Затем я использую std:: istringstream для загрузки содержимого тестовой строки в double. Тогда я cout обе переменные.

#include <string>
#include <sstream>
#include <iostream>

std::istringstream instr;

void main()
{
    using std::cout;
    using std::endl;
    using std::string;

    string test = "888.4834966";
    instr.str(test);

    double number;
    instr >> number;

    cout << "String test:\t" << test << endl;
    cout << "Double number:\t" << number << endl << endl;
    system("pause");
}

Когда я запускаю.exe это выглядит так:

Струнный тест: 888.4834966
Двухместный номер 888.483
Нажмите любую клавишу для продолжения.,,

Строка имеет больше цифр и выглядит так, как будто std:: istringstream загружено только 6 из 10. Как я могу загрузить всю строку в переменную double?

3 ответа

#include <string>
#include <sstream>
#include <iostream>
#include <iomanip>

std::istringstream instr;

int main()
{
    using std::cout;
    using std::endl;
    using std::string;

    string test = "888.4834966";
    instr.str(test);

    double number;
    instr >> number;

    cout << "String test:\t" << test << endl;
    cout << "Double number:\t" << std::setprecision(12) << number << endl << endl;
    system("pause");

    return 0;
}

Он читает все цифры, они просто не все отображаются. Ты можешь использовать std::setprecision (нашел в iomanip) чтобы исправить это. Также обратите внимание, что void main не является стандартным, вы должны использовать int main (и вернуть 0 из него).

Точность вашего вывода, вероятно, просто не показывает все данные в number, Посмотрите эту ссылку, чтобы узнать, как отформатировать точность вывода.

Ваше двойное значение 888.4834966 но когда вы используете:

cout << "Double number:\t" << number << endl << endl;

Он использует точность по умолчанию для double, чтобы установить его вручную, используйте:

cout << "Double number:\t" << std::setprecision(10) << number << endl << endl;
Другие вопросы по тегам