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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Преобразование числа типа double 
:(
    Опции темы
pablo
Дата 7.4.2005, 11:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 320
Регистрация: 12.2.2005
Где: Вильнюс, Литва

Репутация: 4
Всего: 6



Поскажите как преобразовать число из типа double в строку char*.
Опытные люди сказали, что надо юзать ostrstream, но каким образом ???
Может у кого есть какие идеи ???


--------------------
Первый блин всегда похож на сферу, иногда бывает и куб.
PM MAIL ICQ   Вверх
Alastis
Дата 7.4.2005, 12:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 251
Регистрация: 15.11.2004
Где: Казахстан, Астана

Репутация: 4
Всего: 10



Можно так:

Код

double val = 1234.56;//что записываем 
char *buf;// куда записываем 
int digits = 6;//кол-во цифр, которые будут записаны 
gcvt(val, digits, buf); 


или так:

Код

double f; 
char *buf; 
sprintf(buf, "%f", f);



--------------------
Прости, что я говорю, когда ты меня перебиваешь.
PM MAIL WWW ICQ   Вверх
pablo
Дата 7.4.2005, 12:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 320
Регистрация: 12.2.2005
Где: Вильнюс, Литва

Репутация: 4
Всего: 6



Прекрасно, всё работает. Спасибо огромное.


--------------------
Первый блин всегда похож на сферу, иногда бывает и куб.
PM MAIL ICQ   Вверх
Alastis
Дата 7.4.2005, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 251
Регистрация: 15.11.2004
Где: Казахстан, Астана

Репутация: 4
Всего: 10



еще вот попробуй, если нужно через ostrstream:

Код

    std::string conv(double n)
    {
        std::ostrstream stream;
        stream << n;
      return stream.str();
    }



--------------------
Прости, что я говорю, когда ты меня перебиваешь.
PM MAIL WWW ICQ   Вверх
Fire-Plug
Дата 7.4.2005, 22:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Alastis @ 7.4.2005, 12:23)
 
Код

 return stream.str();

Ф-ция ostrstream::str() возвращает указатель на С-строку без 0-терминатора.
Что нужно сделать в твоем решении - использовать streamsize ostrstream::pcount( ) в конструкторе string:
Код

    std::string conv(double n)
    {
        std::ostrstream stream;
        stream << n;
      return std::string(stream.str(), stream.pcount());
    }


--------------------
Объясни другому - поймешь сам (Народная примета)
PM MAIL   Вверх
yaja
Дата 8.4.2005, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



А есть способ сделать ето преобразование гораздо быстрее smile
char *_gcvt(
double value,
int digits,
char *buffer
);

PM MAIL   Вверх
Void
Дата 8.4.2005, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 40
Всего: 173



Цитата(Fire @ 7.4.2005, 22:18)
Ф-ция ostrstream::str() возвращает указатель на С-строку без 0-терминатора.

С каких пор? Он возвращает std::string, чтобы получить C-строку, надо stream.str().c_str()


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
srd
Дата 8.4.2005, 18:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нереварин
**


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

Репутация: 27
Всего: 49



Цитата(yaja @ 9.4.2005, 00:56)
А есть способ сделать ето преобразование гораздо быстрее
char *_gcvt(
double value,
int digits,
char *buffer
);

Зато это не переносимо smile


--------------------
Не смей читать мою подпись!!!
PM MAIL Jabber   Вверх
yaja
Дата 8.4.2005, 22:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата
Зато это не переносимо smile

Не знал smile
PM MAIL   Вверх
Fire-Plug
Дата 10.4.2005, 07:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Void @ 8.4.2005, 18:25)
Цитата (Fire-Plug @ 7.4.2005, 22:18)
Цитата
Ф-ция ostrstream::str() возвращает указатель на С-строку без 0-терминатора.

С каких пор? Он возвращает std::string, чтобы получить C-строку, надо stream.str().c_str()

Действительно, а с каких пор?
ИМХО, когда strstream и производные от него ostrstream & istrstream были разработаны и введены в С++ в качестве потоковых классов. Наверное, это было то самое время, когда вместо заголовочного файла <strstream> приходилось использовать <strstream.h>, а о том, что будет такой std::string не знал даже А.Степанов.
1) Объявление метода ostrstream::str():
Код

char * str();

Вопрос: типы char * и std::string тождественны? С каких пор?
2) Семантика возвращаемого значения метода ostrstream::str():
Цитата
Returns a pointer to the internal character array

Кто-нибудь пробовал использовать что-либо вроде:
Код

ostrstream strm;
strm << blah << blah << blah; 

int len= strlen(strm.str());

Не пробовали? Ну и правильно. Дело может окончиться исключ. ситуацией с кодом EXCEPTION_ACCESS_VIOLATION.
ЗЫ: Если бы контролируемая последовательность в классе strstream имела 0-терминатор, накой тогда был бы нужен метод pcount().
--------------------
Объясни другому - поймешь сам (Народная примета)
PM MAIL   Вверх
Void
Дата 10.4.2005, 08:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 40
Всего: 173



Цитата(Fire @ 10.4.2005, 07:40)
Действительно, а с каких пор?
ИМХО, когда strstream и производные от него ostrstream & istrstream были разработаны и введены в С++ в качестве потоковых классов. Наверное, это было то самое время, когда вместо заголовочного файла <strstream> приходилось использовать <strstream.h>, а о том, что будет такой std::string не знал даже А.Степанов.

Хех, прошу прощения, не заметил разницы между strstream и stringstream. Но тогда встречный вопрос: зачем пользоваться deprecated классами strstream и файлом <strstream.h> вместо стандартного <sstream> и stringstream?


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
Fire-Plug
Дата 10.4.2005, 08:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Void @ 10.4.2005, 08:13)
Но тогда встречный вопрос: зачем пользоваться deprecated классами strstream и файлом <strstream.h> вместо стандартного <sstream> и stringstream

Просто пример был, где предлагалось сконструировать std::string с помощью только strstream::str(). Ну, на ошибку надо было указать. А так, конечно, deprecated классами пользоваться незачем: хлопотно да и error-prone.
--------------------
Объясни другому - поймешь сам (Народная примета)
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.0554 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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