Double Wert in Char konvertieren
-
Hallo,
kann mir jemand sagen, wie ich einen double-Wert in einen char-Wert konvertieren kann, um ihn dann über einen Ansi-String in einer ListBox auszugeben?
Danke im Voraus
-
Warum willst du den Umweg über der Char machen?
Du kannst ihn nem AnsiString einfach zuweisen.double x=3.543; AnsiString s=x; ShowMessage(s);
-
Naja... der AnsiString besteht aus 2 char-Werten und einem double-Wert, die ich aus einem struct in der ListBox anzeigen will.
-
Und was ändert das daran?
-
Du weisst, dass Operatoren für den Ansistring überladen sind, du also sowas z.B. machen kannst :
int icurrent=10; int max=100; AnsiString text; text = "(" + AnsiString(icurrent) + "/" + AnsiString(max)+")";
?
-
Das Problem ist folgendes:
Ich habe ein Array vom Typ char angelegt. In dieses Array kopiere ich aus einem struct 2 Werte von Typ char und eben jenes Element vom Typ double. Das funktioniert natürlich nicht, da ich ne Fehlermeldung bekomme, dass in dem Array mit char-Deklaration natürlich keine double-Werte gespeichert werden dürfen. Deshalb will ich vorher den double Wert in char konvertieren.
Gibts da nen Befehl zu? Oder wie mache ich das dann???
-
Achso. So klappt es dann:
char* ctxt = new char[120]; float x=123.456; AnsiString text; text.printf("%5.4f",x); ctxt=text.c_str(); ShowMessage(ctxt);
Ich vermute allerdings stark, dass es ne eleganter Lösung ohne den Umweg über den String gibt... bin mal gespannt.
-
@robi1806
Dein Code würde ein Speicherleck erzeugen.
mit
char* ctxt = new char[120];
allozierst du ein 120 byte grosses char Array
mit
ctxt=text.c_str();
überschreibst du deinen Pointer, so dass du ihn nicht mehr löschen kannst.
Deinen ganzen Code könnte man auf folgendes reduzierenfloat x=123.456; AnsiString text = x; ShowMessage(text.c_str());
Ich bezweifle aber, dass es das ist was Sedlag will.
[edit]
@Sedlag
Gehört dieser Thread thematisch zu deinem Vorherigen (Datei sequentiell...)?
[/edit]Ciao
-
Mit dem Pointer überschreiben hast du leider Recht, da war ich wohl etwas voreilig.
Wie wär's denn mit:
float x=123.456; AnsiString text; char str[40]; text.printf("%5.4f",x); //da soll bestimmt nicht der gesammte double in die Listbox strcpy (str,text.c_str());
Klappt das? Leider kann ich jetzt nicht testen.
So langsam interessiert mich die Frage auch richtig...
-
Das würde schon gehen.
Wenn man ein double in ein char-Array kriegen will, reicht dann aber auch ein einfaches c-style sprintf.
Wobei der Umweg über char* nicht nötig ist, wenn man den gesamten Text in einen ListBox-Eintrag bekommen will. Da reicht die reine AnsiString-Lösung völlig aus, wie du schon richtig geschrieben hast.
Wenn Sedlag mit diesem Code nicht zufrieden ist, sollte er mal genauer schreiben was er will (oder und/oder etwas Code zeigen).
-
äh - vielleicht bin ich ja heute etwas gehandicapt (wir hatten den ganzen Tag jemand von unserem PPS-Systemhaus da...)
Aber verstehe ich es richtig: Du willst aus 2 chars und einem double einen AnsiString erzeugen?
ctext1 und 2 sollen die beiden chars sein, dwert die double Variable:
AnsiString asText = AnsiString(ctext1) + " " + AnsiString(ctext2) + " " + AnsiString(dwert);
wobei das + " " nur dazu dient ein Leerzeichen zwischen den Variablen zu haben.
Da das ganze in eine ListBox soll:
ListBox1->Items->Add(AnsiString(ctext1) + " " + AnsiString(ctext2) + " " + AnsiString(dwert));
-
Danke für die Hilfe.
-
Edit: Blödsinn wieder gelöscht - sorry!