Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> первод double в string 
:(
    Опции темы
koren
Дата 1.5.2010, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 92
Регистрация: 7.11.2009

Репутация: 1
Всего: 2



Как перевести double в string?

1.233333e+20
2.3333333333333333333333333

не округляя и не меняя структуру числа

Как задать округление числа после точки на количество знаков?
просто cout.precision(2) округляет по количеству знаков всего числа, а не те после точки

И еще меняю - есть число 2300000
Как его преобразовать в 2.3е+06 и обратно (наверное через sprintf - но там плохо идёт округление)?

Моя цель организовать функцию QString::number(double num, char type, int precision) под консоль без Qt (char type - 'f', 'g', 'e'
)


Это сообщение отредактировал(а) koren - 2.5.2010, 10:15
PM MAIL   Вверх
Voldemar2004
Дата 1.5.2010, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1650
Регистрация: 25.12.2004

Репутация: нет
Всего: 23



koren, в C++ Builder есть 
Код

FloatToStr();



--------------------
i_i 
(';') 
(V)

user posted image
PM MAIL   Вверх
Peter
Дата 1.5.2010, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 771
Регистрация: 28.7.2003
Где: Ставрополь

Репутация: -1
Всего: 1



Непонятен вопрос. В смысле, надо сделать так же, как выводит функция printf()? Напечатать в строку:
Код
char s[50];
sprintf(s, "%e", chislo); // в виде 1.233333e+20, т.е. с выделенной мантиссой
std::string ss = s;



--------------------
всё, что делаете, делайте от души, как для Господа (Послание апостола Павла колоссянам, 3:23).
PM MAIL WWW   Вверх
Voldemar2004
  Дата 1.5.2010, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1650
Регистрация: 25.12.2004

Репутация: нет
Всего: 23



koren, вот: 

Код

#include <string>
using namespace std;

double val = 1.233333e+20;
string buf=FloatToStr(val).c_str();
ShowMessage(buf.c_str());


все работает smile


--------------------
i_i 
(';') 
(V)

user posted image
PM MAIL   Вверх
azesmcar
Дата 1.5.2010, 18:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата(Voldemar2004 @  1.5.2010,  18:01 Найти цитируемый пост)
koren, в C++ Builder есть 

А разве это тема по C++ Builder?

Цитата(koren @  1.5.2010,  17:48 Найти цитируемый пост)
Как перевести double в string?

sprintf - в си
boost::lexical_cast, stringstream - в C++

Код

std::string str = boost::lexical_cast<std::string>(5.7);

Код

std::ostringstream stream;
stream << 5.7;
std::string str = stream.str();

PM   Вверх
koren
Дата 1.5.2010, 19:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 92
Регистрация: 7.11.2009

Репутация: 1
Всего: 2



Цитата(Peter @ 1.5.2010,  18:01)
Непонятен вопрос. В смысле, надо сделать так же, как выводит функция printf()? Напечатать в строку:
Код
char s[50];
sprintf(s, "%e", chislo); // в виде 1.233333e+20, т.е. с выделенной мантиссой
std::string ss = s;

с char не заданной длины

Это сообщение отредактировал(а) koren - 2.5.2010, 09:35
PM MAIL   Вверх
Voldemar2004
Дата 1.5.2010, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1650
Регистрация: 25.12.2004

Репутация: нет
Всего: 23



koren, можно:

Код

#include <sstream>
#include <iostream>

//---------------------------------------------------------------------------
int main(int argc, char* argv[])
{

std::ostringstream stream;
stream << 2.3333;
std::string str = stream.str();

char* Out;
strcpy(Out, (char*)stream.str().c_str());

std::cout<<Out;

std::cin.get();

return 0;
}
//---------------------------------------------------------------------------


Цитата(koren @  1.5.2010,  20:15 Найти цитируемый пост)
char не заданной длины
Только это называется указатель на char smile

Добавлено через 4 минуты и 43 секунды
Цитата(koren @  1.5.2010,  20:15 Найти цитируемый пост)
а можна как то сделать


можнА (правильно пишется "можнО") 

Цитата

Наречие как-то пишется через дефис


пиши грамотно, а то читать неприятно.


--------------------
i_i 
(';') 
(V)

user posted image
PM MAIL   Вверх
azesmcar
Дата 1.5.2010, 21:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата(Voldemar2004 @  1.5.2010,  21:41 Найти цитируемый пост)
char* Out;
strcpy(Out, (char*)stream.str().c_str());

 smile  smile  smile 
PM   Вверх
Voldemar2004
Дата 1.5.2010, 21:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1650
Регистрация: 25.12.2004

Репутация: нет
Всего: 23



azesmcar, что такое ? smile


--------------------
i_i 
(';') 
(V)

user posted image
PM MAIL   Вверх
azesmcar
Дата 1.5.2010, 22:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата(Voldemar2004 @  1.5.2010,  21:56 Найти цитируемый пост)
azesmcar, что такое ? smile 

копирование данных в неинициализированый указатель smile 
PM   Вверх
Voldemar2004
Дата 1.5.2010, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1650
Регистрация: 25.12.2004

Репутация: нет
Всего: 23



Цитата(azesmcar @  1.5.2010,  23:17 Найти цитируемый пост)
копирование данных в неинициализированый указатель


Разве при копировании он не инициализуется ?

Так что ли:
Код

char* Out="";


Это сообщение отредактировал(а) Voldemar2004 - 1.5.2010, 22:39


--------------------
i_i 
(';') 
(V)

user posted image
PM MAIL   Вверх
koren
Дата 2.5.2010, 09:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 92
Регистрация: 7.11.2009

Репутация: 1
Всего: 2



Как задать округление числа после точки на количество знаков?
просто cout.precision(2) округляет по количеству знаков всего числа, а не те после точки

И еще меняю - есть число 2300000
Как его преобразовать в 2.3е+06 и обратно (наверное через sprintf - но там плохо идёт округление)?

Моя цель организовать функцию QString::number(double num, char type, int precision) под консоль без Qt (char type - 'f', 'g', 'e'
)



Это сообщение отредактировал(а) koren - 2.5.2010, 10:14
PM MAIL   Вверх
azesmcar
Дата 2.5.2010, 10:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата(Voldemar2004 @  1.5.2010,  22:34 Найти цитируемый пост)
Разве при копировании он не инициализуется ?

нет, strcpy выделением памяти не занимается.

Цитата(Voldemar2004 @  1.5.2010,  22:34 Найти цитируемый пост)
char* Out="";

 smile 
Код

char* Out=new char[str.size() + 1];

PM   Вверх
Voldemar2004
Дата 2.5.2010, 10:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1650
Регистрация: 25.12.2004

Репутация: нет
Всего: 23



azesmcar, виноват, всегда забываю этот момент  smile 

Это
Код

char* Out=new char[str.size() + 1];


тоже, что и это:

Код

char* Out=new char[strlen(stream.str().c_str())+1];



--------------------
i_i 
(';') 
(V)

user posted image
PM MAIL   Вверх
koren
Дата 2.5.2010, 11:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 92
Регистрация: 7.11.2009

Репутация: 1
Всего: 2



Код

char buf[50];

    double h=precision_/10;
    sprintf(buf,"%hf",h,num); 


h=0.5 не работает 
как исправить?
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0558 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.