Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
1 / 1 / 2
Регистрация: 01.11.2016
Сообщений: 21

Перевести строку типа string, в строку типа double

18.12.2016, 22:57. Показов 2740. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите с кодом. Как строку типа стринг, например 123123.123123, перевести в тип double? Кода перевожу с помощью "atof" оно берёт только число до запятой, как взять всё число?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.12.2016, 22:57
Ответы с готовыми решениями:

Как скопировать строку типа std::string в другую строку такого же типа?
Хотел скопировать строку #include "stdafx.h" #include <iostream> #include <string> using namespace std; int _tmain(int...

Читать строку типа string из файла, разбить ее на массив слов типа char
Нужно сделать так что бы строчка вида "<слово1>:<слово2>:<слово3>:<слово4>" , считывалась и каждое слово заносилось в свою переменную....

Перевести строку типа char в массив типа int
Задание : В текстовом файле INPUT.TXT записаны целые числа через пробел, возможно, в несколько строк. За один просмотр файла сформировать...

20
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
18.12.2016, 23:08
atof/strtod.
0
296 / 125 / 106
Регистрация: 30.10.2015
Сообщений: 690
18.12.2016, 23:10
Цитата Сообщение от vabe1337 Посмотреть сообщение
оно берёт только число до запятой
123123.123123 = 123123 + 0.123123
Может вот так получится.
0
1 / 1 / 2
Регистрация: 01.11.2016
Сообщений: 21
18.12.2016, 23:13  [ТС]
Nemovok, Возможно, а как мне определить числа после запятой?
0
296 / 125 / 106
Регистрация: 30.10.2015
Сообщений: 690
18.12.2016, 23:21
Лучший ответ Сообщение было отмечено vabe1337 как решение

Решение

Легче, чем мой прошлый вариант
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <string>
#include <cstdlib>
 
int main()
{
  std::string str1 = "12.12123";
  char *ptrEnd; 
 
  std::cout << strtod(str1.c_str(), &ptrEnd) + 1.0 << std::endl; 
 
  return 0;
}
1
1 / 1 / 2
Регистрация: 01.11.2016
Сообщений: 21
18.12.2016, 23:45  [ТС]
Nemovok, ptrEnd - это строка, а мне нужно что бы было типа double и не только число после запятой, а всё число
0
296 / 125 / 106
Регистрация: 30.10.2015
Сообщений: 690
18.12.2016, 23:47
Видно код вы даже не запускали... Я при выводе на экран прибавляю к переменный число, а это доказывает, что эта переменная тоже число...
0
1 / 1 / 2
Регистрация: 01.11.2016
Сообщений: 21
18.12.2016, 23:55  [ТС]
Nemovok, Извиняюсь, сразу начал тестить код вместе со своей прогой)). Действительно всё работает.Спасибо, сечас буду подстраивать под свой

Добавлено через 4 минуты
Nemovok,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <cmath>
using namespace std;
int main() {
setlocale (LC_ALL, "Russian");
char a[100];
char *ptrEnd;
double p;
int znak, z = 0;
cout << "Введите до какого числа совершить округление: " << endl;
cin >> znak;
string b;
cout << "Введите строку: " << endl;
cin >> a;
for (int i = 0; i < strlen(a); i++)
if (isdigit(a[i])){
    b += a[i];
}else if (ispunct(a[i])){
    b += a[i];
}   int j = 0;
    while(b[j] == '0' && j < b.length()){
    b.erase(j,1);
    }
    strtod(b.c_str(), &ptrEnd);      
 
    cout << ptrEnd;
return 0;
}
Вот мой код, может подскажите, почему выводит число после запятой. Вводим 123.123, на выходе .123
0
296 / 125 / 106
Регистрация: 30.10.2015
Сообщений: 690
19.12.2016, 00:13
В 17 строке вы уверены в ваших действиях?
0
1 / 1 / 2
Регистрация: 01.11.2016
Сообщений: 21
19.12.2016, 00:16  [ТС]
Nemovok, А можно чем-то заменить?(когда вводит через gets прога не работала)
0
296 / 125 / 106
Регистрация: 30.10.2015
Сообщений: 690
19.12.2016, 00:18
Попробуйте getline()
0
1 / 1 / 2
Регистрация: 01.11.2016
Сообщений: 21
19.12.2016, 00:26  [ТС]
Nemovok, не помогло.
Присвоил
C++
1
 p = strtod(b.c_str(), &ptrEnd);
выводит число до точки типа double
0
296 / 125 / 106
Регистрация: 30.10.2015
Сообщений: 690
19.12.2016, 00:26
И перед вызовом strtod() выведите на экран строку b, убедитесь, все ли с ней хорошо...
1
1 / 1 / 2
Регистрация: 01.11.2016
Сообщений: 21
19.12.2016, 00:28  [ТС]
Nemovok, Вывел, там нужно число
0
296 / 125 / 106
Регистрация: 30.10.2015
Сообщений: 690
19.12.2016, 00:34
Странно, запустил ваш код. у меня все нормально (не смотрю на алгоритм, выводит то, что я ввел). Вы когда строку вводите, случаем запятую вместо точки не ставите?
0
1 / 1 / 2
Регистрация: 01.11.2016
Сообщений: 21
19.12.2016, 00:37  [ТС]
Nemovok, ставлю точку, странно, в какой среде вы программируете?
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
19.12.2016, 00:56
Цитата Сообщение от Renji Посмотреть сообщение
atof/strtod
А std::stod для кого написали?
0
296 / 125 / 106
Регистрация: 30.10.2015
Сообщений: 690
19.12.2016, 01:13
Цитата Сообщение от Mr.X Посмотреть сообщение
А std::stod для кого написали?
Использовали)
Цитата Сообщение от Nemovok Посмотреть сообщение
std::cout << strtod(str1.c_str(), &ptrEnd) + 1.0 << std::endl;
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
19.12.2016, 01:29
Цитата Сообщение от Nemovok Посмотреть сообщение
Использовали)
Не, std::stod это не std::strtod! Первая принимает аргумент типа std::string, а вторая - сишную строку.
1
296 / 125 / 106
Регистрация: 30.10.2015
Сообщений: 690
19.12.2016, 01:49
Самому интересно стало
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <iostream>
#include <string.h>
 
int main()
{
  char *ptrEnd;
  std::string::size_type sz;
  std::string str;
 
  std::cout << "Enter string: ";
  std::cin >> str;
 
  bool isTrue = true;
  for (int i = 0; i < str.size(); i++) { // Елси это цифры или точка, то все хорошо
    if (str[i] != '.') {
      if (!isdigit(str[i])) {
      isTrue = false;
      }
    }
  }
 
  if (isTrue) {
    double result = std::stod(str, &sz);
 
    // Производите любые операции над result тут. 
 
    std::cout << "Result: " << result << std::endl;
  }
  else {
    std::cout << "Symbols!" << std::endl;
  }  
 
  return 0;
}


Очень странно, работать можно только с небольшими числами
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.12.2016, 01:49
Помогаю со студенческими работами здесь

Запись информации из вектора типа string в вектор типа double
Как записать только числа , которые хранятся в векторе типа стринг, в вектор типа дабл, в векторе типа стринг есть как буквы так и числа ,...

Разделить строку типа string на лексемы
Есть строка string, нужно разбить её на лексемы. У меня не получается использовать strtok с типом string.

Как считать строку типа string?
Доброго времени суток, у меня возникла такая проблема: когда строку задаю константой - программа работает хорошо, когда хочу считать с...

Передать строку типа string в system
Добрый вечер! Нужно реализовать функцию,которая бы передавала в system аргумент str (который ввел пользователь) Хотел написать...

Как сформировать строку типа string
#include &lt;iostream&gt; #include &lt;string&gt; int main() { string s; s = 'a'; s = 'b'; s = '\0'; std::cout...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru