long double zu string
-
Hi
ich bin noch relativ neu auf dem gebiet c++ deswegen zerreißt mich bitte nicht gleich in der luft

ich versuche eine long double variable mithilfe von sprintf zu einem string umzuwandeln...
long double Zahl = [...eine berechnung...]; char buffer[50]; sprintf(buffer,"%Lf",Zahl);wenn ich jetz aber den buffer ausgebe kommen irgendwelche komischen ergebnisse raus zB wenn die zahl 500 is gibt er -0.000000 aus...bei 5000 gibt er -18014398blabla aus
ich hab schonmal versucht die zahl als double oder float zu deklarieren...das funktioniert dann ohne weiteres...nur bei long double macht er probleme.
was mache ich falsch?
-
Wir sind hier in C++, also:
string DoubleToString(double value) { ostringstream oss; oss << value; return oss.str(); }MfG
-
Hm okay das klappt insoweit alsdass ich eine std::strign datei zurückkriege...
ich will das ganze jedoch über winapi in ein edit-feld eintragen und dazu brauch ich ein char-array...
gibts vielleicht einen etwas simpleren weg das ganze zu bewerkstelligen? bzw warum funktioniert meine ursprüngliche methode eigentlich nicht richtig?
-
Hi,
afterone schrieb:
Hm okay das klappt insoweit alsdass ich eine std::strign datei zurückkriege...
ich will das ganze jedoch über winapi in ein edit-feld eintragen und dazu brauch ich ein char-array...Ist ein Klassiker: Dafür hat std::string die Funktion c_str().
BTW: Die Formulierung "...std::string Datei..." verstehe ich nicht.afterone schrieb:
...gibts vielleicht einen etwas simpleren weg das ganze zu bewerkstelligen? ...
Noch simpler als einen 2-Zeiler ?
Gruß,
Simon2.
-
Ist ein Klassiker: Dafür hat std::string die Funktion c_str().
vielen dank jetz klappts ^^
BTW: Die Formulierung "...std::string Datei..." verstehe ich nicht.
naja ka wie man das nennt o___O string variable? stream? ich bin doch nur n noob xD
Noch simpler als einen 2-Zeiler ?
naja die sache mit dem ostringstream war mich nich so ganz geheur weil ich das vorher noch nie gesehen hab...scheint aber ganz nützlich zu sein ^^ muss mich mal näher mit beschäftigen...ich frag mich allerdings trotzdem noch warum das sprintf nich gefunzt hat o___O
Naja trotzdem thx nochmal!
-
afterone schrieb:
naja ka wie man das nennt o___O string variable? stream? ich bin doch nur n noob xD
Wie wärs mit "...ich bekomme einen String zurück"?

naja die sache mit dem ostringstream war mich nich so ganz geheur weil ich das vorher noch nie gesehen hab...scheint aber ganz nützlich zu sein ^^ muss mich mal näher mit beschäftigen...ich frag mich allerdings trotzdem noch warum das sprintf nich gefunzt hat o___O
Vermutlich eine Sache der Typbreiten. Die printf-Familie muss anhand des Format-Strings (also dein %Lf) wissen, wieviel Bytes an Daten sie bekommt. Wenn das nicht übereinstimmt (z.B. %d erwartet 4 Byte, Du übergibst aber ein short) kommen "komische" Ergebnisse heraus.
Allein deshalb ist es besser, Streams zu verwenden, da diese wissen, wie "breit" ihre Daten sind.
-
Es funktioniert deswegen nicht weil der Format String "falsch" ist. Der modifier "L" ist MS-spezifisch, und nur auf integrale Typen anwendbar, d.h. NICHT auf floats/doubles.
sprintf kennt schlicht und ergreifend kein long double, zumindest entnehme ich das der Doku.
-
also hier: http://www.cplusplus.com/reference/clibrary/cstdio/sprintf.html steht dass es mit L klappen soll...aber wie auch immer...vielleicht lag es wirklich daran dass es keine "echten" doubles waren o___O hauptsache es klappt jetz
thx nochmal
-
hustbaer schrieb:
Es funktioniert deswegen nicht weil der Format String "falsch" ist. Der modifier "L" ist MS-spezifisch, und nur auf integrale Typen anwendbar, d.h. NICHT auf floats/doubles.
sprintf kennt schlicht und ergreifend kein long double, zumindest entnehme ich das der Doku.Dem ist nicht so.
"l" ist für long bzw. unsigned long
"ll" für long long bzw. unsigned long long (nur C99)
"L" für long double
-
SH**.
Das kommt davon wenn ich in der falschen Doku gucke.
camper, du hast Recht
@afterone: was meinst du mit "echten" doubles?
-
naja das was LordJaxom beschrieben hat, dass er halt wirklich ein long double wollte (was weiß ich wie viel byte die haben) ich aber einen einfachen integer übergeben hab vom wert her (selbst wenn er als long double deklariert ist)
das heißt ich hab ihm zb eine 5000 gegeben...er wollte aber lieber 5000.23742347189287318351928 oder so