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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Что является в С++ аналогом функции DoubleToStr ? 
:(
    Опции темы
Wowa
  Дата 16.11.2004, 21:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

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



Что является в С++ аналогом функции DoubleToStr ?
Нужно строку со значением Double присоединить к Стрингу smile
PM WWW   Вверх
dargaard
Дата 16.11.2004, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Экс. модератор
Сообщений: 450
Регистрация: 7.5.2004

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



int main() {
double f=2.3;
char c[20];

sprintf(c,"%f",f);
printf("%s\n",c);
}

или
sprintf(c,"%g",f);
чтоб убрать ненужные нули.


Это сообщение отредактировал(а) dargaard - 16.11.2004, 21:33


--------------------
Ты должна сделать добро из зла 
потому что его больше не из чего
сделать. Р.П.Уоррен
PM MAIL WWW ICQ   Вверх
Wowa
Дата 16.11.2004, 21:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

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



прокатит ли?

Код

string test() {
double f = 2.3;
string c ='lalala';

return ( c + sprintf(c,"%f",f) );
}


Если нет, то как мне привести код к такой форме? smile
PM WWW   Вверх
dargaard
Дата 16.11.2004, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Экс. модератор
Сообщений: 450
Регистрация: 7.5.2004

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



Код

#include <stdio.h>
#include <iostream>
#include <string>
                                                                               
using namespace std;
string test();
int main() {
   string p;
   p=test();
   cout<<p<<endl;
}
                                                                               
string test() {
   double f=2.3;
   char c[20];
   string mystring="lalala";
   sprintf(c,"%g",f);
                                                                               
   return mystring+c;
}




--------------------
Ты должна сделать добро из зла 
потому что его больше не из чего
сделать. Р.П.Уоррен
PM MAIL WWW ICQ   Вверх
shedon
Дата 16.11.2004, 21:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1209
Регистрация: 17.1.2003
Где: Нижнiй Новгородъ

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



Admin
А что ты хоочешь сделать ?

Код

int main()
{
       double f=3.14;
       char s[255] = "lalal";
       sprintf(s+strlen(s), "%f", f);
       printf("%s", s);
       return 1;
}



--------------------
Programming is like sex: One mistake and you have to support it your lifetime
PM MAIL WWW ICQ   Вверх
Wowa
Дата 16.11.2004, 22:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

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



shedon
Зачем в твоем варианте?
Цитата(shedon @ 16.11.2004, 19:42)
printf("%s", s);


Добавлено @ 22:38
Ладно, чтобы было понятнее, вот полный текст функции:

Код

string beAusgezahltenBetrag (int Zinssatz, int Laufzeit, int Betrag, int Monat=0, int VerzBetragAusVormonat=0)
{
 Monat++;
 return (Monat == Laufzeit) ? "Ausgezahlte Betrag" + DoubleToStr( (VerzBetragAusVormonat+Betrag)*(Zinssatz/12/100+1) ):beAusgezahltenBetrag(Zinssatz, Laufzeit, Betrag, Monat, (VerzBetragAusVormonat+Betrag)*(Zinssatz/12/100+1) );
 
 
}


Мне надо, чтобы так все и осталось в одну строку, хотя это не является в принципе обязательным. Но выполнять присваивание какой-то переменной значения - запрещено. Т.к. это не С++, а FC++ (функциональное программирование).
PM WWW   Вверх
shedon
Дата 16.11.2004, 22:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1209
Регистрация: 17.1.2003
Где: Нижнiй Новгородъ

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



просто вывод результат для наглядности, можешь убрать если не нравится smile


--------------------
Programming is like sex: One mistake and you have to support it your lifetime
PM MAIL WWW ICQ   Вверх
Wowa
Дата 16.11.2004, 22:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

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



еще мысли ? smile
PM WWW   Вверх
NiJazz
Дата 16.11.2004, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Jazz coder
****


Профиль
Группа: Экс. модератор
Сообщений: 2286
Регистрация: 10.8.2003
Где: Москва

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



Если говорить о программировании под Win32 (Unicode), то советую пользоваться таким способом форматирования строки:
Код

#include <windows.h>
#include <iostream.h>

void main()
{
LPTSTR  lpStr = (LPTSTR)LocalAlloc(LMEM_FIXED, 128);
DWORD  dwDigit = 123;

wsprintf(lpStr, "My number equals: %d", dwDigit);
cout << lpStr << endl;

LocalFree(lpStr);
}

Только затрудняюсь ответить, как работать с double. Может, кто-нибудь знает?
Добавлено @ 23:06
А чтобы сцепить две строки, используй
Код

LPTSTR StrCat(LPTSTR lpStr1, LPCTSTR lpStr2);

lpStr2 присоединяется к lpStr1

Хотя можно и так:
Код

wsprintf(StrOut, "%s %s", str1, str2);
В strout буду идти две стооки через пробел.

PM MAIL   Вверх
sergejzr
Дата 16.11.2004, 23:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

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



Вот это работать будет smile
может красивей получится написать smile
Код

string beAusgezahltenBetrag (int Zinssatz, int Laufzeit, int Betrag, int Monat, int VerzBetragAusVormonat)
{
Monat++;
char buf[256];//сколько надо

if(Monat == Laufzeit)
{
               sprintf(buf,"%d",(VerzBetragAusVormonat+Betrag)*(Zinssatz/12/100+1));
               return string("Ausgezahlte Betrag") +buf;

}
return beAusgezahltenBetrag(Zinssatz, Laufzeit, Betrag, Monat, (VerzBetragAusVormonat+Betrag)*(Zinssatz/12/100+1) );
}

Добавлено @ 23:18
Вот, extras вдогонку smile

Наверняка пригодится smile

Код

string DoubleToStr(double d)
{
char buf[256];//сколько надо
sprintf(buf,"%d",d);
return string(buf);
}

string IntToStr(int i)
{
char buf[256];//сколько надо
sprintf(buf,"%i",i);
return string(buf);
}

Тогда можно будет с твоей исходной функцией работать не меняя её smile


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
sergejzr
Дата 16.11.2004, 23:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

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



Правда с этими буквами %d и %i я не уверен. Может быть %f и %l.

Эти спецификации типов в функциях я уже подзабыл smile



--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Wowa
Дата 17.11.2004, 01:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

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



sergej.z
IF, ELSE, WHILE, FOR и прямое объявление переменных нельзя использовать в FC++
PM WWW   Вверх
sergejzr
Дата 17.11.2004, 01:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

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



Не знаю FC++...
А что, значит функции DoubleToStr и IntToStr, которые я написал тоже не пойдут?
потому что там массив обьявляется?


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
dargaard
Дата 17.11.2004, 01:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Экс. модератор
Сообщений: 450
Регистрация: 7.5.2004

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



а ftoa есть в фс++?
если да то
Код


string beAusgezahltenBetrag (int Zinssatz, int Laufzeit, int Betrag, int Monat=0, int VerzBetragAusVormonat=0)
{
 Monat++;
return (Monat == Laufzeit) ? "Ausgezahlte Betrag" + ftoa( (VerzBetragAusVormonat+Betrag)*(Zinssatz/12/100+1) ):beAusgezahltenBetrag(Zinssatz, Laufzeit, Betrag, Monat, (VerzBetragAusVormonat+Betrag)*(Zinssatz/12/100+1) );
   
 
}




--------------------
Ты должна сделать добро из зла 
потому что его больше не из чего
сделать. Р.П.Уоррен
PM MAIL WWW ICQ   Вверх
sergejzr
Дата 17.11.2004, 01:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

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



Только тогда наверное
Код

return (Monat == Laufzeit) ? string("Ausgezahlte Betrag") + ftoa( (VerzBetragAusVormonat+Betrag)*(Zinssatz/12/100+1) ):beAusgezahltenBetrag(Zinssatz, Laufzeit, Betrag, Monat, (VerzBetragAusVormonat+Betrag)*(Zinssatz/12/100+1) );



--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

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

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

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

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


 




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


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

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