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

C++: как преобразовать double в string?

25.11.2015, 22:18. Показов 4391. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Например, вычисляем значение 22/7 с точностью до 10 знаков после запятой:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <windows.h>
using namespace std;
int main()
{
system("cls");
double b;
int a1 = 22;
int a2 = 7;
b = static_cast<double>(a1) / a2;
cout.precision(10);
cout.setf(std::ios::fixed);
cout << b << endl;
return 0;
}
При этом требуется вывести не только результат вычисления, но и, допустим, седьмой знак после запятой.

Для доступа к отдельным символам строки есть оператор [] и функция at(), но работают они только с переменными типа string. Отсюда и вопрос: как преобразовать тип double в тип string?

Если полученный результат (3.1428571429) представить в виде строковой переменной, то седьмой знак после запятой выводится на экран следующим образом:
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
#include <windows.h>
using namespace std;
int main()
{
system("cls");
string d = "3.1428571429";
cout << d[8] << endl;
cout << d.at(8);
return 0;
}
На экран будет выведено:
1
1

Задание вывода восьмого символа строки понятно почему: отсчёт начинается с нуля, поэтому восьмой символ данной строки соответствует седьмому знаку после запятой.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.11.2015, 22:18
Ответы с готовыми решениями:

Как преобразовать тип double в string
Есть переменная типа double нужно ее преобразовать в тип string Как это можно сделать наиболее простым способом используя стандартные...

Как преобразовать string в double и обратно?
нашел функцию atof но не хочет запускаться. сам начеркал функцию для перевода в double но обратно чет даже идей нет.

Преобразовать double в string
Подскажите как преобразовать double в string ?? Нашел что то похожее при помощи ostringstream , но там не совсем то.. ...

12
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
25.11.2015, 22:29
Лучший ответ Сообщение было отмечено watersoda как решение

Решение

watersoda, как вариант:
C++
1
2
3
4
5
6
7
8
9
10
11
12
    #include <iostream>     
    #include <sstream>     
     
    int main ()
    {
      std::ostringstream foo;                            
      double pi = 3.141592653589793;
      foo.precision( 10 );
      foo << pi;
      std::cout << foo.str() << std::endl;
      return 0;
    }
http://ideone.com/QZK5mS

или реализуйте метод для деления в столбик,зарезервировав нужное количество символов в строке.
1
Эксперт PHP
 Аватар для Kerry_Jr
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
25.11.2015, 22:32
watersoda, std::to_string()
0
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
25.11.2015, 22:36
Kerry_Jr, будет содержать только 6 знаков после запятой.
C++
1
2
3
4
5
6
7
8
9
    #include <iostream>     
    #include <string>     
     
    int main ()
    {
          double pi = 3.141592653589793;
          std::cout << std::to_string(pi) << std::endl;
          return 0;
    }
http://ideone.com/4CGots
2
25.11.2015, 22:46

Не по теме:

Цитата Сообщение от S_el Посмотреть сообщение
только 6 знаков после запятой
Халтурщики, а не разработчики!

0
25.11.2015, 22:54

Не по теме:

Цитата Сообщение от Kerry_Jr Посмотреть сообщение
Халтурщики, а не разработчики!
Ага. Еще не хватает функции округления с заданной точностью.

0
 Аватар для MicM
840 / 498 / 325
Регистрация: 29.12.2009
Сообщений: 1,106
25.11.2015, 23:03
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
#include <boost/lexical_cast.hpp>
 
int main ()
{
    double pi = 3.141592653589793;
    std::cout << boost::lexical_cast<std::string>(pi) << std::endl;
    return 0;
}
1
4 / 4 / 0
Регистрация: 04.04.2015
Сообщений: 174
26.11.2015, 18:03  [ТС]
Цитата Сообщение от MicM Посмотреть сообщение
#include <iostream>
#include <boost/lexical_cast.hpp>
int main ()
{
* * double pi = 3.141592653589793;
* * std::cout << boost::lexical_cast<std::string>(pi) << std::endl;
* * return 0;
}
fatal error: boost/lexical_cast.hpp: No such file or directory
0
 Аватар для MicM
840 / 498 / 325
Регистрация: 29.12.2009
Сообщений: 1,106
26.11.2015, 18:16
Ага, boost ставить надо
http://www.boost.org
0
4 / 4 / 0
Регистрация: 04.04.2015
Сообщений: 174
26.11.2015, 19:12  [ТС]
Цитата Сообщение от MicM Посмотреть сообщение
Ага, boost ставить надо
http://www.boost.org
Почитал про установку boost и его прикручивание к CodeBlocks - довольно муторное занятие и не факт, что закончится успехом. Без boost только вариант от S_el подойдёт?
0
 Аватар для MicM
840 / 498 / 325
Регистрация: 29.12.2009
Сообщений: 1,106
26.11.2015, 19:19
watersoda, как вариант.
0
4 / 4 / 0
Регистрация: 04.04.2015
Сообщений: 174
26.11.2015, 19:39  [ТС]
Цитата Сообщение от S_el Посмотреть сообщение
watersoda, как вариант:
* * #include <iostream> * *
* * #include <sstream> * *
int main ()
* * {
* * * std::ostringstream foo; * * * * * * * * * * * * * *
* * * double pi = 3.141592653589793;
* * * foo.precision( 10 );
* * * foo << pi;
* * * std::cout << foo.str() << std::endl;
* * * return 0;
* * }
Попробовал:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <sstream>
using namespace std;
int main()
{
ostringstream foo;
double pi = 3.141592653589793;
foo.precision(10);
foo << pi;
cout << foo.str() << std::endl;
cout << foo.at(8);
return 0;
}
При компиляции получил сообщение: error: 'std::ostringstream' has no member named 'at'
0
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
26.11.2015, 20:09
Цитата Сообщение от watersoda Посмотреть сообщение
При компиляции получил сообщение: error: 'std::ostringstream' has no member named 'at'
Все правильно,нет такого метода у std::ostringstream
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.11.2015, 20:09
Помогаю со студенческими работами здесь

Преобразовать string^ в double
Есть старая программа на c++, написанная в среде MS VS2010 с использование WinForm, и, как следствие .Net Появилась проблема с...

Error C2440: =: невозможно преобразовать 'std::string' в 'double'
&gt;c:\users\nreshetova\documents\visual studio 2008\projects\sort3d1\sort3d1\sort3d1.cpp(73) : error C2440: =: невозможно преобразовать...

Error C2664: std::vector<_Ty>::push: невозможно преобразовать параметр 1 из 'double' в 'const std::string &'
#include &lt;iostream&gt; #include &lt;stack&gt; #include &lt;sstream&gt; #include &lt;string&gt; using namespace std; int main() { string...

Как преобразовать char* в string и вывести переменную string на экран?
for (int k = 0; k &lt; 10; k++) { int x = (int)rand() / RAND_MAX + rand() % 6 + 2; char *chars = new char; ...

Преобразовать 2 числа int в 1 число float(double) | double int1.int2
Всем привет. Изучая азы C++, столкнулся с такой проблемой. Есть два значения типа int, их необходимо преобразовать в одно значение типа...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru