AnsiString numerisch?



  • Hallo zusammen,

    gibt es denn eine einfache und schnelle Möglichkeit zu überprüfen, ob ein AnsiString numerisch ist?

    Ich habe ein StringGrid wo der Benutzer nur numerische Ausdrücke verwenden darf.

    Muss ich das z.B. mit IsNumeric überprüfen, char by char oder gibt es eine Möglichkeit den kompletten Ausdruck (StringGrid1->Cells[j][i]) auf numerisch hin zu prüfen?

    Danke
    Todd



  • Du kannst versuchen, den String in einen int-Wert umzuwandeln - wenn das einen Fehler ergibt, war er nicht numerisch 😉



  • Hallo

    StrToInt, wenn nicht umgewandelt werden kann kommt eine Exception die du abfangen kannst.

    bis bald
    akari



  • Danke für die prompte hilfe,

    wenn das mit StrToInt geht geht das sicherlich auch mit StrToFloat...
    werde es gleich mal ausprobieren.



  • Hallo

    Ja das Verhalten ist genau das gleiche, nur für float/double.

    bis bald
    akari



  • Okay...
    Ich habe das jetzt an einem kleinen Beispiel ausprobiert, aber es funktioniert nicht. Die Exception Meldung kommt trotzdem:

    Form...ein Edit...ein Button:

    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
     try {StrToFloat(Edit1->Text);}
     catch(...)
     {
      ShowMessage("Keine zulässige Eingabe");
     }
    }
    

    Zur Vollständigkeit hier die Exception Message:
    "Projekt Project1.exe raised exception class EConvertError with message "..." is not a valid floating point value. Process stopped...

    Was ist denn hier falsch?

    Danke



  • Die Meldung kommt immer, so lange Du im Debug-Modus kompilierst und in der IDE ausführst. Könnte man notfalls abschalten, sehe ich aber keinen Sinn drin.

    Wichtig ist, wenn Du das Programm endgültig kompilierst, kommt diese Meldung nicht mehr.



  • Alles klar...vielen Dank.



  • Hallo,

    Warum benutzt Du nicht "TryStrToFloat" ?

    Die Routine TryStrToFloat konvertiert einen String in einen Gleitkommawert und meldet den Erfolg der Ausführung mit einem booleschen Wert.

    Unit

    SysUtils

    Kategorie

    Gleitkomma-Konvertierung

    extern PACKAGE bool __fastcall TryStrToFloat(const AnsiString S, Extended &Value);
    extern PACKAGE bool __fastcall TryStrToFloat(const AnsiString S, double &Value);
    extern PACKAGE bool __fastcall TryStrToFloat(const AnsiString S, float &Value);

    Beschreibung

    Rufen Sie TryStrToFloat auf, um einen AnsiString-Wert in S in einen Gleitkommawert zu konvertieren. S muß aus einem optionalen Vorzeichen (+ oder -), einem aus Ziffern bestehenden String mit optionalem Dezimaltrennzeichen und einer optionalen Mantisse gebildet sein. Die Mantisse besteht aus 'E' bzw. 'e', gefolgt von einem optionalen Vorzeichen und einem Integer. Vor- und nachgestellte Leerzeichen werden ignoriert.

    Die globale Variable DecimalSeparator definiert das Zeichen, das als Dezimaltrennzeichen verwendet wird. Tausendertrennzeichen und Währungssymbole dürfen sich nicht im String befinden. Enthält der String keinen gültigen Wert, gibt TryStrToFloat den Wert Default zurück.

    TryStrToFloat fügt das Ergebnis in Value ein und gibt true zurück, wenn die Konvertierung durchgeführt werden konnte. Andernfalls wird false zurückgegeben.

    Nash


Anmelden zum Antworten