Delphi Befehl gesucht!
Ich will eine if-then-Funktion schreiben und zwar will ich schreiben: Wenn m keine Zahl ist, dann soll eine Fehlermeldung kommen. Und mir fehlt der Befehl dafür, also wie schreibe ich m ist keine Zahl?
Danke im Voraus
5 Antworten
Hi,
also wenn es um wir davon ausgehen, dass m ein string und auf ein Integer geprüft werden soll ist folgender Code eine schnelle Sache:
uses Sysutils;
var m:string;
zahl:Integer;
begin
if tryStrToInt(m,zahl) then
ShowMessage(m + ' ist ein Integerwert')
else
ShowMessage(m + ' ist kein Integerwert');
end;
das ganze funktioniert übrigens auch mit TryStrtoFloat.
Viel Erfolg!
- Falls die Variable m:Char ein Zeichen ist, kann man mit if m in ['0'..'9'] then prüfen, ob das Zeichen eine Ziffer. ist.
- Falls die Variable *m:String eine Zeichenkette ist, so muss man sich als erstes überlegen, ob m eine beliebige Fließkommazahl z:Double sein darf oder eine Ganzzahl z:Integer sein muss. Man kann sich zudem weitere Einschränkungen wie "muss ungleich Null sein" oer "muss positiv sein" überlegen. Dies hängt vom Einsatzfall ab.
- Am empfehlenswertesten für Anfänger ist für Fließkommazahlen die Funktion z := StrToFloatDef(m, default) wobei m:String deine Zeichenkette und default ein Standardwert ist, falls m keine Zahl ist. Das Ergebnis der Funktion ist z:Double, also die in eine Zahl umgewandelte Zeichenkette. Falls m:String keine Zahl war, so wird stattdessen default zurückgegeben. Wenn Du also z.B. unbedingt eine positive Zahl benötigst, wäre der Aufruf if StrToFloatDef(m, 0) = 0 then begin (...keine Zahl...) end else begin (...Zahl...) end der entsprechende Code. Statt Null könnte man hier auch irgendeine andere Zahl einsetzen, die bei der Eingabe nicht vorkommen kann.
- Für Ganzzahlen (z:Integer) gibt es die entsprechende Funktion StrToIntDef(m, default).
wer dieses alte Posting finden sollte: mittlerweile hatten wir 10 neue Versionen.
In denen gibt es eine Reihe von "Try...." Funktionen, siehe Hilfe.
Es gibt auch "isNumber" etc.
Hab grad die Funktion in einem Forum gefunden:
function IsNumeric(s:String):Boolean;
var i:Integer;
begin
Result:=False;
for i := 1 to Length(s) do
if (s[i] > '9') or (s[i] < '0') then exit;
Result:=True;
end;
Die kannst du in deinem if einfach aufrufen, also
If IsNumeric(m) = False then showmessage('Was ist an "nur Zahlen" so schwer zu verstehen?');
Kannst dir evtl. auch den ganzen Thread angucken: http://www.delphipraxis.net/59233-pruefen-ob-edit-nur-aus-zahlen-besteht.html
Alternative: if not CharInSet(m[i], ['0'..'9']) then
Dann kann man einfacher noch . und , ergänzen. Mit ors geht das natürlich auch.
Von welchem Typ ist m? Vielleicht kannst du eventuell mit System.Variants arbeiten und den Befehl VarIsNumeric()
nutzen oder ist es nicht das, was du suchst?
Ist m ein String und du willst nur schauen, ob der Inhalt eine Zahl ist? ➼ System.SysUtils.tryStrToFloat zum Beispiel.