Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.57/47: Рейтинг темы: голосов - 47, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 29.02.2016
Сообщений: 44
1

Преобразование Double в string

20.03.2017, 17:46. Просмотров 9807. Ответов 12
Метки нет (Все метки)

Допустим у меня есть число double n = 0.0000000000 мне нужно преобразовать его в строку string s = 0.0000000000. Как это сделать?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.03.2017, 17:46
Ответы с готовыми решениями:

Преобразование double в string
Нужно преобразовать double в строку. Знаю про функции ostringstream и stod(), но их проблема в том,...

Преобразование string в double
У меня есть массив типа string, в котором хранятся нецелые числа. Надо отсортировать массив по...

Преобразование string в double
Как преобразовать string в double?

Преобразование из string в double
Вот простой пример демонстрирующий данную проблему: Так работает: #include <iostream> #include...

12
Эксперт С++
1585 / 915 / 777
Регистрация: 06.02.2016
Сообщений: 2,399
Записей в блоге: 29
20.03.2017, 17:56 2
C++
1
2
3
4
5
6
7
8
#include <iostream>
#include <string>
using namespace std;
int main(){
    double d=0.0000000000;
    string s=to_string(d);
    cout<<s<<endl;;
}
1
0 / 0 / 0
Регистрация: 29.02.2016
Сообщений: 44
20.03.2017, 18:01  [ТС] 3
error: 'to_string' was not declared in this scope

#include <iostream>
#include <string>
прописаны
0
Эксперт С++
1585 / 915 / 777
Регистрация: 06.02.2016
Сообщений: 2,399
Записей в блоге: 29
20.03.2017, 18:07 4
Компилятор не поддерживает С++11
0
0 / 0 / 0
Регистрация: 29.02.2016
Сообщений: 44
20.03.2017, 18:10  [ТС] 5
Другого способа нету? хотя бы в char преобразовать
0
Любитель чаепитий
3509 / 1623 / 504
Регистрация: 24.08.2014
Сообщений: 5,545
Записей в блоге: 1
20.03.2017, 18:14 6
Цитата Сообщение от Frolien Посмотреть сообщение
Другого способа нету?
http://rextester.com/JAPPGY24020
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//g++  5.4.0
 
#include <iostream>
#include <sstream>
 
namespace mylib
{
    std::string to_string(const double & d)
    {
        std::ostringstream strm;
        strm << d;
        return strm.str();
    }
}
 
int main()
{
    std::cout << "Hello, world!\n";
    
    std::string s = mylib::to_string(0.000000001);
    
    std::cout << s << "\n";
}
1
0 / 0 / 0
Регистрация: 29.02.2016
Сообщений: 44
20.03.2017, 19:08  [ТС] 7
Работает но выводит к примеру 4e-010 а мне нужно чтоб выводило 0.0000000004

Добавлено через 9 минут
т.к. если преобразовать 4e-010 и 0.0000000004 (хоть это одно и тоже) в хэши то получится 2 разных хеша

Добавлено через 8 минут
дело в том что я вместо 0.00000000001 поставил переменную n она тоже равна 0.00000000001 но при выполнении строки std::string s = mylib::to_string(n); учитывается как 1e-011. Как отключить преобразование 0.00000000001 в 1e-011?

Добавлено через 13 минут
и да этот способ округляет число до 6 знаков после запятой а мне нужно 30 знаков....
0
22 / 22 / 7
Регистрация: 01.02.2017
Сообщений: 54
Записей в блоге: 1
20.03.2017, 19:23 8
C++
1
2
3
char psz[32];
double real = .0;
sprintf(psz, "%.12f", real);
или
C++
1
2
int nPrecision = 12;
sprintf(psz, "%.*f", nPrecision, real);
0
Форумчанин
Эксперт CЭксперт С++
8160 / 5008 / 1436
Регистрация: 29.11.2010
Сообщений: 13,458
20.03.2017, 19:51 9
Цитата Сообщение от Frolien Посмотреть сообщение
мне нужно 30 знаков
double не обладает такой точностью, вам нужны длинные числа.
0
0 / 0 / 0
Регистрация: 29.02.2016
Сообщений: 44
20.03.2017, 19:59  [ТС] 10
выводит нули а не число..
0
Любитель чаепитий
3509 / 1623 / 504
Регистрация: 24.08.2014
Сообщений: 5,545
Записей в блоге: 1
20.03.2017, 20:03 11
http://www.boost.org/doc/libs/... ision.html
Using typedef cpp_dec_float_50 hides the complexity of multiprecision to allow us to define variables with 50 decimal digit precision just like built-in double.
C++
1
cpp_dec_float_50 seventh = cpp_dec_float_50(1) / 7;
By default, output would only show the standard 6 decimal digits, so set precision to show all 50 significant digits.
C++
1
2
std::cout.precision(std::numeric_limits<cpp_dec_float_50>::digits10);
std::cout << seventh << std::endl;
which outputs:
Код
0.14285714285714285714285714285714285714285714285714
0
0 / 0 / 0
Регистрация: 29.02.2016
Сообщений: 44
20.03.2017, 20:05  [ТС] 12
Короче вроде разобрался но я использовал double val = atof(stroka.c_str());. Но val не полностью копирует строку. К примеру была строка 0.030952830107638805160367311898 а в val получилось 0.030952830107638804740810556382.
Как это исправить?
0
6913 / 5978 / 2709
Регистрация: 14.04.2014
Сообщений: 25,504
20.03.2017, 22:05 13
Цитата Сообщение от Frolien Посмотреть сообщение
Как это исправить?
Никак. У double же не бесконечная точность.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.03.2017, 22:05

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Преобразование из string в double
Объясните пожалуйста в чем связь между преобразованием данный из string в double и библиотекой...

Преобразование long double в string
Здравствуйте уважаемые форум чане! Будьте так добры, подскажите выход из сложившейся ситуации!Как...

Преобразование string в long double
Одним из недостатков C++ является отсутствие для бизнес-программ встроенного типа для денежных...

Преобразование типов string->double c заданной точностью*?
Есть входящая строка 123456 или 00546.. или любая другая. Как преобразовать в тип double, чтобы...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

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