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 reduzieren

    float 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!


Log in to reply