Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> не получается корректоно преобразоваие string>int, string>double 
V
    Опции темы
americanets
Дата 5.11.2008, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1100
Регистрация: 27.9.2006

Репутация: нет
Всего: 12



Код

#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 ? 


--------------------
Пусть популярную музыку слушают те, среди кого она популярна
PM   Вверх
vinick
Дата 5.11.2008, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 285
Регистрация: 9.6.2005

Репутация: 3
Всего: 22



Цитата(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;



PM MAIL ICQ Jabber   Вверх
americanets
Дата 5.11.2008, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1100
Регистрация: 27.9.2006

Репутация: нет
Всего: 12



спасибо, понял


--------------------
Пусть популярную музыку слушают те, среди кого она популярна
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0492 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.