Zahl durch Punkte trennen



  • Handelt es sich denn um Float oder Int bei Label->Caption.
    Bei letzteres '.' durch '' ersetzen und dann StrToInt. Try and catch nicht vergessen. 😉
    Alternativ durch eine Schleife laufen lassen und neuen String somit erstellen.



  • Hallo chilli,

    die Umkehrfunktion heißt einfach "StrToFloat" (ohne F dazwischen - das F bei "FloatToStrF" steht für 'Formatted'):

    double zahl = StrToFloat(Label1->Caption);
    


  • hallo,

    danke schonmal für die Antworten.

    @TH69: Das kann ich leider nicht so machen, weil die Zahl (z.B. 1.250.000) zwei Punkte enthält. Da erhalte ich dann die Fehlermeldung, dass diese Zahl keine gültige Fließkommazahl, also float, ist.

    @Mankind: Es handelt sich um Int. Meine Frage: wie kann ich denn nun die Punkte, die ja jeweils an anderen Stellen sitzen, durch '' ersetzen? Hab in der Suche leider nichts passendes gefunden.



  • mit StringReplace kannst du bestehende Zeichenketten in andere (auch leer) ersetzten
    http://docwiki.embarcadero.com/VCL/de/AnsiStrings.StringReplace



  • Hallo,
    ich habe jetzt mal folgendes ausprobiert und eine Fehlermeldung zur 6. Zeile (extern etc.) erhalten:

    Unit1.cpp:

    #include "System.hpp"
    #include "SysUtils.hpp"
    
    LPCTSTR s = AnsiString (Label1->Caption).c_str();
    
    extern PACKAGE System::AnsiString __fastcall StringReplace(const System::AnsiString s,
    const System::AnsiString OldPattern ('.'), const System::AnsiString NewPattern (' '),
    Sysutils::TReplaceFlags Flags);
    

    Fehlermeldung:

    [C++ Error]: Declaration syntax error.
    

    Der Cursor stand dabei bei dem ersten Mal System::

    Lg,



  • kleiner Tipp.
    Bleib vorerst bei Konsolenanwendungen.
    Lerne mit einem guten Buch oder Tutorial die Grundlagen.
    Dan weisst du auch wie man eine Funktion richtig anwendet.

    Wenn du die Grundlagen mit Funktionen/Klassen/variablen etc beherrscht, schau dir langsam die vcl (GUI-Bibliothek des C++ Builder) an.
    Nur Copy&Paste funktioniert nicht.



  • hallo,

    für euch scheint dieser Vorgang doch relativ einfach zu sein. Kann nicht bitte jemand kurz mal einen code dazu reinstellen? Ich weiß, dass dieser Weg nicht so toll ist, aber wir müssen von der Schule aus, ein Programm schreiben und haben dafür den Borland C++ Builder 1 vorgesetzt bekommen.
    Ich bin zurzeit wirklich verzweifelt. Wir müssen das Programm bis zum Ende der Ferien fertigstellen. Kann mir nicht netterweise jemand helfen? 😞
    Ich habe mir auch schon ein Buch besorgt und dieses durchgearbeitet (C++ für Kids), jedoch hat mir dies in diesem Zusammenhang nicht recht weitergeholfen.

    Lg,
    chilli



  • Hallo,

    ich bin's nochmal. Ich habe mir jetzt mal überlegt, wie man den direkt auf Zeichen zugreifen kann.

    Also durch folgenden Code kriege ich die Punkte weg, doch nun habe ich Leerzeichen, weil ich '' nicht schreiben darf:

    N=1;
    while (N < 100)
    {
    if (test[N]=='.')
    {
    test[N]=' '; //hier darf ich nicht =='' schreiben, weil immer ein parameter angegeben werden muss
    }
    N++;
    }
    

    Dadurch, dass dort noch Leerzeichen sind, kann ich es immer noch nicht in eine int verwandeln.



  • so,

    ich hab' mir jetzt nach langem ausprobieren selber ne Lösung zusammengebastelt. Ist zwar nicht schön, aber funktioniert:

    String test;
    test=Label1->Caption;
    try
    {
    N=1;
    Edit1->Text="";
    while (N < 100)
    {
     if ((test[N]!='.') && (test[N]!=!isdigit))
     {
      Edit1->Text= (Edit1->Text) + (test[N]);
     }
     else if ((test[N]!='.') && (test[N]==!isdigit))
     {
      N=100;
     }
     N++;
    }
    test=Edit1->Text;
    
    Zahl2=StrToInt (test);
    }
    catch (...)
    {
     ShowMessage ("Vorbei");
    }
    
    ShowMessage (test);
    

    Lg,
    chilli



  • Bist du mit StringReplace nicht zurechtgekommen? Der Aufruf ist recht simpel:

    String strZahl = StringReplace(Label1->Caption, ".", "", (TReplaceFlags) rfIgnoreCase);
    

    In der BCB-Hilfe findest du weitere Infos.



  • @Chilli

    Warum nimmst Du nicht einfach die Komponente?

    Da kannst Du über TIntLabel->Caption IMMER die eingetragene Zahl (integer) wieder auslesen!

    das ist ja Sinn der Komponente:
    - Belibige Int- Werete eintragen
    - Anzeige erfolgt "formatiert"
    - In Caption ist immer der eingetragen Zahlenwert verfügbar.

    Gruss
    frank

    PS:
    das geht genauso ähnlich auch mit double- Zahlen zu machen.ich nutze auch dafür ne passende zweite Kompomente (dann z.B. mit Masseinheiten dran; oder als Winkelanzeige [Eingabe Bogenmass => Anzeige Grad, gerundet])....



  • Ich frage mich, warum du das überhaupt zurückwandeln musst. Ich habe die Befürchtung, dass du das Label bzw. dessen Beschriftung als Variable zur Wertspeicherung missbrauchst. Merk dir den Wert irgendwo und benutz´ das Label nur zur Anzeige.


Anmelden zum Antworten