Float in MessageBox



  • Hallo zusammen,
    ich hatte schonmal indirekt in anderen Threads danach gefragt, aber ich habe diese Grundlage immer noch nicht ganz verstanden und hoffe auf eine einfache Erklärung.

    Wenn ich eine Variable mit float vereinbat habe und diese Zahl dann in eine MessageBox darstellen möchte, weiß ich, dass man es umwandeln muss. Ich vermute in char, bin mir aber nicht sicher und weiß nicht wie es funktionert. Ich dachte das macht der Befehl c.str, aber der hilft da leider nicht.

    Ich danke für alle Antworten
    lg, freakC++

    PS. Habe mehrere Tutorials durchgemacht, doch ist das ein Punkt, der nach meiner Meinung nicht außreichend barbeitet wurde, weshalb ich ihn einfach nicht verstehe!!!! :p



  • Hallo

    Wenn schon dann char*, sprich kein einzelnes Zeichen sondern eine Zeichenkette.
    Und im Builder nimmt man lieber AnsiString, und dafür gibts auch die passenden Funktionen wie FloatToStrF. Weiteres siehe BCB-Hilfe. Ein Tutorial brauchst du dazu nicht.

    bis bald
    akari



  • aber wenn es sich nur um Zahlen handelt, warum soll ich dan AnsiString nehmen! Float ist doch eigentlich geeigneter, oder?
    Muss ich den die Variablen, die in die MessageBox sollen auch mit char* vereinbaren?

    Vielen Dank für die Hilfe
    lg, freakC++



  • eventuell hilft ja dieser Thread: http://www.c-plusplus.net/forum/viewtopic-var-t-is-171253-and-start-is-0-and-postdays-is-0-and-postorder-is-asc-and-highlight-is-%2Amessagebox%2A.html, der ist allerdings für Integer, aber vielleicht bekommst du durch ein wenig probieren ja auch Float da rein gebastelt 🙄



  • Hallo

    aber wenn es sich nur um Zahlen handelt, warum soll ich dan AnsiString nehmen! Float ist doch eigentlich geeigneter, oder?

    Wenn ich eine Variable mit float vereinbat habe und diese Zahl dann in eine MessageBox darstellen möchte

    Du beantwortest deine Frage doch selber. Alles was du irgendwie anzeigen willst muß in Strings egal welcher Art umgewandelt werden. Sei es nun direkt oder impliziet. Du brauchst AnsiString natürlich nicht wenn du mit float rechnen willst. Erst wenn du das Ergebnis anzeigen willst.

    bis bald
    akari



  • Alles klar! Habs verstanden! 😃

    Vielen Dank für die Hilfe
    lg, freakC++



  • ahh...doch noch eine Frage zu diesem Quelltext:

    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
     Vmax = CGM / pow(Rmax, 0.5);
     Ergebnis = FloatToStrF (Vmax, ffNumber, 8,2);
     Loesung = "Das Ergebnis für Vmax lautet ";
     Loesung += Ergebnis;
     Titel = "Für Rmax = " + String(Rmax) + " und CGM = " + String (CGM, ffNumber, 8, 2);
     Application->MessageBoxA(Loesung.c_str (), Titel.c_str (), 0);
    }
    

    Es ist ja so, dass alles was angezeigt werden soll, in einen Strin umgewandelt werden muss. Das heißt doch, dass der Befehl "String" wie auch in diesem Beispiel die Zahl (hier Rmax oder CGM) in den String umwandelt, oder?!

    Vielen Dank für die Hilfe!! (ich denke, dass die Grundlagen mir bald geläufiger werden 😃 )

    lg, freakC++



  • hast du schonmal versucht das zu kompilieren? 😮
    warum geht Zeile 4? warum Zeile 7 nicht?



  • ups....kleiner Rechtschreibfehler...es soll natürlich FloatToStrF heißen!!

    Sry! Aber das Programm funzt!! Leider muss ich an mir selber wieder zweifeln, dass ich es verstanden habe, denn nach meiner Vorstellung müsste dieser Quelltext jetzt funktionieren, was jedoch nicht der Fall ist!!

    if (GM == 0)
      {
       Ergebnis = V * pow(R, POT);
       Loesung = FloatToStrF (Ergebnis, ffNumber, 8, 2);
       Application->MessageBox (Loesung.c_str (), "", 0);
      }
    

    Brauche nochmals Hilfe 🙄
    lg, freakC++

    PS. Fehler E2034 und E2342 kommen!! Ich habe schonmal über diesen Quelltext gesprochen, doch möchte ich immer alles verstehen, was ich in mein Programm schreiben!! Kann sein, dass sich manches ähnlich anhört, was ich schonmal gefragt habe!! Für mich ist es jedoch ziemlich wichtig 😃



  • Ich brauche Hilfe!!!



  • in welcher Zeile treten denn die Fehler auf?



  • In der Zeile "Loesung = FloatToStrF (Ergebnis, ffNumber, 8, 2);"

    Fehler:

    [C++ Fehler] Unit1.cpp(87): E2034 Konvertierung von 'AnsiString' nach 'long double' nicht möglich

    [C++ Fehler] Unit1.cpp(87): E2342 Keine Übereinstimmung des Typs beim Parameter 'Value' ('long double' erwartet, 'AnsiString' erhalten)

    Vielen Dank für eure Hilfe
    lg, freakC++



  • Hallo

    Wie die Fehlermeldung schon sehr klar sagt hast du irgendwo einen AnsiString, wo aber der Compiler korrekterweise einen double/float erwartet. Da du aber in deinem Code nicht die Variablendeklarationen zeigst und wir damit nicht wissen welche Variable welchen Typ hat könnten wir nur raten.

    Tip : benutzt lieber lokale als globale Variabln, dann hast du die Deklarationen auch immer an Ort und Stelle.

    bis bald
    akari



  • Hallo,
    es soll kein Geheimnis sein. Ich hab alles mit float vereinbat!! Ist es denn nicht von Nachteil, lokal zu vereinbaren, denn die Variabeln werden noch in anderen Methoden gebraucht, was heißt, dass ich sie immer neu anmelden müsste!?

    lg, freakC++



  • ist die Variable Ergebnis wirklich vom Typ float? zeig mal die Variablendeklaration, denn in deinem 4. Post ist diese Variable vom Typ AnsiString



  • oha..ich hab was ausgelassen. Ergebnis ist natürlich mit String vereinbart. Hier:

    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    float Vmax, Rmax, CGM;
    float GM, V, R, POT;
    String Ergebnis, Titel, Loesung, Knopf;
    
    //---------------------------------------------------------------------------
    

    Vielen Dank für eure Hilfe!!!
    lg, freakC++


Anmelden zum Antworten