Модераторы: 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   Вверх
Wowa
Дата 17.11.2004, 01:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


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

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



Цитата(sergej @ 16.11.2004, 23:38)
А что, значит функции DoubleToStr и IntToStr, которые я написал тоже не пойдут?
потому что там массив обьявляется?

Думаю подойдут
Добавлено @ 01:50
Цитата(dargaard @ 16.11.2004, 23:42)
а ftoa есть в фс++?

не знаю, но наверняка. А можно краткое описание ftoa ?
PM WWW   Вверх
dargaard
Дата 17.11.2004, 01:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Описания у меня нету. Просто думал что может есть что нить по аналогии с itoa
(перевод инта в строку).

char * itoa ( int value, char * buffer, int radix );


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


Эксперт
Group Icon


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

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



Цитата
`ftoa' undeclared (first use this function)


Это обычный компиллер g++
Добавлено @ 02:03
Еще так ругается:
Цитата
default argument given for parameter 5 of `std::string
  beAusgezahltenBetrag(int, int, int, int = 0, int = 0)'

PM WWW   Вверх
sergejzr
Дата 17.11.2004, 02:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


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

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



Цитата(Admin @ 17.11.2004, 00:49)
Думаю подойдут

Ну тогда юзай смело smile

А что за зверь такой FC++?


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


Эксперт
Group Icon


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

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



Цитата(sergej @ 17.11.2004, 00:03)
А что за зверь такой FC++?

Если бы я знал smile http://forum.vingrad.ru/index.php?showtopi...071&hl=fc\
Я так понял, отличается только отсутствием некоторых операторов.
PM WWW   Вверх
dargaard
Дата 17.11.2004, 02:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



вот попробовал свою фтоа написать используя условия фс++.
Осталось только заменить if-ы на ?: оператор
Долго не тестил но вроде работает. (надеюсь.) но енто - изврат полнейшийsmile

Код

string ftoa(double f,int k,int signs) {
                                                                                   
   f-=k;
   f*=10;
   signs++;
                                                                                   
   if (signs==7) {return string("0"); }
   else if (signs==1) {
       return string(itoa(k))+string(".")+string(ftoa(f,(int)(f),signs));
   } else return string(itoa(k))+string(ftoa(f,(int)(f),signs));
}

string myftoa(double f) {
   return ftoa(f,(int)(f),0);
}

...
string a = myftoa(10.4523211);



Это сообщение отредактировал(а) dargaard - 17.11.2004, 02:37


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


Эксперт
Group Icon


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

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



Цитата(dargaard @ 17.11.2004, 00:36)
но енто - изврат полнейший

однозначно, блин.. А что же такое? Функцию DoubleToString мы уже написали, но неужели в С++ нет простой функции присоединения строки? В PHP это делается так: a.b
Точно служет символом присоединения.

В Делфи, насколько я помню, есть функция DoubleToString и строки можно через + пристыковывать одна к другой.
PM WWW   Вверх
dargaard
Дата 17.11.2004, 05:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата
, но неужели в С++ нет простой функции присоединения строки?

Если имеем char * то для стыковки используем strcat(строка,строка_которую_пресоединить).
Если строка типа string то работает +



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


Jazz coder
****


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

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



Admin
Что за FC++?
PM MAIL   Вверх
sergejzr
Дата 17.11.2004, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


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

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



Цитата(Admin @ 17.11.2004, 01:53)
но неужели в С++ нет простой функции присоединения строки?

Хочешь, можешь оператор переложить smile
Си++ ведь сам прогер под себя настраивает.
В начале считай что Си перед тобой. А там строка ведь не существует как тип..

Только конечно с операторами поостророжней надо smile


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


Эксперт
Group Icon


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

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



Как избавится от этих ошибок?
Цитата(Admin @ 17.11.2004, 00:00)
default argument given for parameter 5 of `std::string
  beAusgezahltenBetrag(int, int, int, int = 0, int = 0)'


PM WWW   Вверх
sergejzr
Дата 17.11.2004, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


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

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



Довольно странная ошибка. Он чего функцию за конструктор считает....

На всякий случай:
если функция задекларирована со значениями по умолчанию,
Код
string beAusgezahltenBetrag(int, int, int, int = 0, int = 0);


то в имплементации писать int=0 второй раз нельзя.
Т.е пишешь просто
Код
string beAusgezahltenBetrag(int a, int b, int c, int d, int e)
{
//имплементация
}


Где взять комплиер на FC++? smile



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


Эксперт
Group Icon


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

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



Цитата(sergej @ 17.11.2004, 10:33)
Где взять комплиер на FC++?

Такого нет, насколько я знаю. Я использую просто обычный g++ 3.2.2. версия.
Добавлено @ 12:39
Цитата(sergej @ 17.11.2004, 10:33)
На всякий случай:

ты прав smile
PM WWW   Вверх
Wowa
Дата 17.11.2004, 13:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


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

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



Цитата(sergej @ 16.11.2004, 21:25)
Правда с этими буквами %d и %i я не уверен. Может быть %f и %l.

Да, да, Действительно правильнее так:

Код

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


иначе ругается:
Цитата
0_3.cpp: In function `std::string DoubleToStr(double)':
0_3.cpp:70: warning: int format, double arg (arg 3)



В общем, можно сказать УРА и всем спасибо! smile Теперь всё без варнунгов smile
Добавлено @ 13:33
а функция такой вид теперь имеет: Собственно, почти как и было, только функцию DoubleToStr мы сами дописали.
Код

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

PM WWW   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.1567 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


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

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