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


Автор: Vredniy 7.11.2007, 14:30
Привет  smile  ! Помогите пожалуйста преобразовать string в double с 2-ого члена.  smile 
Почему нельзя таким способом ???
Код

...
string Str[]={"00:01:00","1565694","52.7429","-0.2479","0.3824","0.3593200"};
double b = static_cast< double >( Str[1] );
...

Автор: HappyLife 7.11.2007, 14:38
Код
string Str[]={"00:01:00","1565694","52.7429","-0.2479","0.3824","0.3593200"};
double b = atof(Str[1].c_str());

Автор: bel_nikita 7.11.2007, 14:38
читаем http://forum.vingrad.ru/faq/topic-157902.html

Автор: Vredniy 7.11.2007, 14:49
Цитата(HappyLife @ 7.11.2007,  14:38)
Код
string Str[]={"00:01:00","1565694","52.7429","-0.2479","0.3824","0.3593200"};
double b = atof(Str[1].c_str());

Компилятор мне выдал "1.56569е+006" что это значит?

Автор: Xenon 7.11.2007, 15:05
Vredniy, scientific представление. А вообще, раз юзаем string, то почему бы и stringstream не заюзать?
Код

std::string str = "10";
double var = 0.0;
std::istringstream(str) >> var;
std::cout << var;

Автор: Vredniy 7.11.2007, 15:40
Цитата(Xenon @  7.11.2007,  15:05 Найти цитируемый пост)
А вообще, раз юзаем string, то почему бы и stringstream не заюзать?


А где можно почитать????  smile 

Автор: Xenon 7.11.2007, 15:45
Где угодно - хоть тот же Страуструп.

Автор: Vredniy 7.11.2007, 16:29
Цитата(HappyLife @ 7.11.2007,  14:38)
Код
string Str[]={"00:01:00","1565694","52.7429","-0.2479","0.3824","0.3593200"};
double b = atof(Str[1].c_str());

Этот способ работает но уменьшается точность, выбодит только 6 символов, как сделать чтобы выводил все циферки ?

Автор: JackYF 7.11.2007, 21:03
Цитата(Vredniy @  7.11.2007,  16:29 Найти цитируемый пост)
выбодит только 6 символов

 smile 

Автор: EvilJC 7.11.2007, 21:19
Перегнать строку в массив типа char и написать функцию, чтобы проверял каждую  цифру в массиве и записывал число. У меня было похожее задание. Есть даже специальная формула, только к сожалению я её не помню.

Автор: Dims 9.11.2007, 03:43
Цитата(Vredniy @  7.11.2007,  14:30 Найти цитируемый пост)
Почему нельзя таким способом ???

Потому что желаемое тобой преобразование не запрограммировано в библиотеке и ядре Си++ как преобразование типов. 

Сам посуди, в строковом виде числа могут быть записаны, например, по-русски или по-американски, то есть, через запятую или или через точку. Мало ли как потребуется переводить? Поэтому такую неуниверсальную вещь не включили в язык.

Вместо этого в библиотеке есть функции, которые, по сути, вычисляют дробное число по его текстовому представлению. Есть функции и в API виндов. То есть, это не преобразование типа, а вычисление. 

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