Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > не получается корректоно преобразоваие string>int


Автор: americanets 5.11.2008, 15:18
Код

#include <iostream>
#include <sstream>
#include <string>
int str2int (const std::string str) {
    std::stringstream ss(str);
    int n;
    ss >> n;
    return n;
}

double str2double (const std::string str) {
    std::stringstream ss(str);
    double n;
    ss >> n;
    return n;
}
std::string int2str (int n) {
    std::stringstream ss;
    ss << n;
    return ss.str();
}
int main () {

    std::string t = "2333334564564564";
    int I = str2int( t );
    std::cout << I << std::endl;
    int d = 4;
    std::string a = int2str( d );
    std::cout << a << std::endl;
    std::string tt = "233545445654.4";
    double Id = str2double( tt );
    std::cout << Id << std::endl;
    return 0;
}


на "маленьких" числах работает нормально , а вот с большими проблемы


например  2333334564564564

Код

./test 
875967796
4
2.33545e+11



как сделать корректное преобразование и нормальный вывод double , не 2.33545e+11 , а 233545445654.4 ? 

Автор: vinick 5.11.2008, 17:21
Цитата(americanets @  5.11.2008,  15:18 Найти цитируемый пост)

например  2333334564564564

в int столько не влезет.
Простой вариант 
Код

int str2int (const std::string str) {
    std::stringstream ss(str);
    int n;
    if(! (ss >> n))
        throw out_of_range();
    return n;
}


А по хорошему посмотри как внутри boost::lexical_cast это делается.

нормальный вывод double обеспечивается манипуляторами std::fixed, std::setprecision.
например 
Код

 std::cout << std::fixed << std::setprecision(6) << d << std::endl;



Автор: americanets 5.11.2008, 17:29
спасибо, понял

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)