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

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

Восстановить пароль Регистрация
 
kaban4ig
2 / 2 / 0
Регистрация: 14.12.2010
Сообщений: 37
23.05.2013, 08:44     Строковые потоки. Преобразование типов (как сделать чтобы из строки число полностью преобразовывалось в double без потери чисел) #1
Всем привет я перевожу 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 без потери чисел)
Посмотрите здесь:

Преобразование int и double в char без использования sprintf() C++
C++ Преобразование типов string->double c заданной точностью*?
Преобразование типов: строки в double C++
C++ Как сделать в конструкциий switch, чтобы он считал норм float и double
C++ Вывести long double число без перевода в double
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Vourhey
Почетный модератор
6468 / 2243 / 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 без потери чисел)
Ответ Создать тему
Опции темы

Текущее время: 02:40. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru