2013-07-10 4 views
0

людям! Я боролся с этой проблемой в течение некоторого времени, и до сих пор я не нашел для нее никакого решения.(C++) std :: istringstream считывает до 6 цифр из строки в double

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

#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. Как я могу загрузить всю строку в двойную переменную?

+1

попробовать 'instr.precision (8)' до 'instr.str (test);' –

ответ

1

Точность вашего вывода, вероятно, просто не отображает все данные в number. См. Это link, как форматировать точность вывода.

+0

Стандартные методы ввода не используют 'precision()'. – aschepler

5
#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 из него).

1

Ваше двойное значение 888.4834966 но при использовании:

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

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

cout << "Double number:\t" << std::setprecision(10) << number << endl << endl;