Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
kaban4ig
2 / 2 / 0
Регистрация: 14.12.2010
Сообщений: 37
#1

Строковые потоки. Преобразование типов (как сделать чтобы из строки число полностью преобразовывалось в double без потери чисел) - C++

23.05.2013, 08:44. Просмотров 1026. Ответов 4
Метки нет (Все метки)

Всем привет я перевожу string в double следующим образом
C++
1
2
3
4
5
6
7
double fromString(const std::string& s) 
{
  std::istringstream iss(s);
  double res;
  iss >> res;
  return res;
}
Если вызвать функцию для "123.12345" то в double попадут только 6 цифр (123.123), а допустим для "1234.1234567" в double попадёт (1234.12)
C++
1
2
3
4
    
string str="123.12345";
    double d;
    d=fromString(str);
Вопрос: как сделать чтобы из строки число полностью преобразовывалось в double без потери чисел.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.05.2013, 08:44     Строковые потоки. Преобразование типов (как сделать чтобы из строки число полностью преобразовывалось в double без потери чисел)
Посмотрите здесь:

Деления двух чисел используя явное преобразование типов C++
Преобразование int и double в char без использования sprintf() C++
Преобразование строки в double C++
C++ Преобразование типов string->double c заданной точностью*?
Преобразование типов: строки в double C++
C++ Как сделать в конструкциий switch, чтобы он считал норм float и double
C++ Преобразование типов - как строку чисел перевести в целочисленный массив ?
C++ Преобразование типов. Откуда берётся double?
C++ Преобразование строки в long double
Преобразование типов double в int для задания размерности массива C++
Некорректное преобразование double в int (приведение типов) C++
C++ Как преобразовать число float в int без потери данных?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Vourhey
Почетный модератор
6474 / 2249 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
23.05.2013, 09:10     Строковые потоки. Преобразование типов (как сделать чтобы из строки число полностью преобразовывалось в double без потери чисел) #2
kaban4ig, как ты узнаешь, что туда попадает? Посмотри в дебаггере, или установи precision для std::cout, если просто на экран выводишь.
-=ЮрА=-
Заблокирован
Автор FAQ
23.05.2013, 09:23     Строковые потоки. Преобразование типов (как сделать чтобы из строки число полностью преобразовывалось в double без потери чисел) #3
kaban4ig, используй манипуляторы форматирования вывода
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <string>
#include <sstream>
#include <iomanip>
#include <iostream>
using namespace std;
 
int main()
{
    double value = 0;
    string input = "123.12345789";
    stringstream ss;
    if(ss<<input)
    if(ss>>setprecision(10)>>value)
        cout<<setprecision(10)<<value<<endl;
    cin.get();
    return 0;
}
Миниатюры
Строковые потоки. Преобразование типов (как сделать чтобы из строки число полностью преобразовывалось в double без потери чисел)  
-=ЮрА=-
Заблокирован
Автор FAQ
23.05.2013, 09:27     Строковые потоки. Преобразование типов (как сделать чтобы из строки число полностью преобразовывалось в double без потери чисел) #4
Цитата Сообщение от kaban4ig Посмотреть сообщение
Если вызвать функцию для "123.12345" то в double попадут только 6 цифр
- это происходит потому что дефалтом вывод консоли настроен на точность - до 6-ти знаков после запятой. Для большей точности следует "говорить" консоли что хотим больше цифирей.
ЗЫ: setprecision рабоатет до 15 знаков после запятой.
Вот почитай http://www.cyberforum.ru/blogs/34326/blog468.html - там есть ещё способ форматирования в стиле Си - тоже на 15 цифр после зпт
kaban4ig
2 / 2 / 0
Регистрация: 14.12.2010
Сообщений: 37
24.05.2013, 05:56  [ТС]     Строковые потоки. Преобразование типов (как сделать чтобы из строки число полностью преобразовывалось в double без потери чисел) #5
Большое спасибо=)

Добавлено через 15 часов 25 минут
А в чём тут проблема не подскажете ?
C++
1
2
3
4
5
6
7
8
template <typename R>
R fromString(const std::string& s) 
{
  std::istringstream iss(s);
  R res;
  iss >> res;
  return res;
}
Ошибка: error C2783: 'R fromString(const std::string &)' : could not deduce template argument for 'R'
Yandex
Объявления
24.05.2013, 05:56     Строковые потоки. Преобразование типов (как сделать чтобы из строки число полностью преобразовывалось в double без потери чисел)
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru