Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - "xd" ist ein gültiger Integerwert....


soisseteben - So 22.10.06 11:50
Titel: "xd" ist ein gültiger Integerwert....
Hallo erstmal,
Ich prüfe mit folgender Methode, ob ein eingegebener Wert eine Ganzzahl darstellt:

Delphi-Quelltext
1:
2:
3:
try
  StrToInt(Text);
except on EConvertError do ....

Dabei ergab sich das Problem, das Ausdrücke wie "xd" (=13) oder "x3" (=3) korrekt konvertiert werden können. "x" hingegen versteht StrToInt nicht als gültigen Integerwert...

Wie kann ich dieses Problem aus dem Weg räumen?

Danke schonmal.


Gausi - So 22.10.06 11:58

StrToInt interpretiert Zeichenfolgen, die mit einem x beginnen, als Zahl in der Hexadezimaldarstellung. Und D(Hex) ist nunmal 13(Dec).
(btw: Warum verwechseln Informatiker ständig Halloween mit Weihnachten? - Weil 31 Okt = 25 Dec ....)

Wenn du nur die Dezimaldarstellung erlauben willst, musst du wohl was eigenes basteln:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
function isDezimalZahl(aString: String): boolean;
var i: integer;
begin
  if aString = '' then result := false
  else 
  begin
    result := true;
    for i := 1 to length(aString) do
      if not aString[i] in [0..9then
      begin
        result := false;
        break; 
      end;
  end;
end;


mkinzler - So 22.10.06 12:01

Kleine Gegenfrage, was soll den x als Integer darstellen? 10 (röm.)?


soisseteben - So 22.10.06 12:05

Danke! :D


soisseteben - So 22.10.06 12:16

Ähm, ich war wohl etwas vorschnell: bei dieser Zeile kommt die Fehlermeldung "Operator auf diesen Oparantentyp nicht anwendbar":

Delphi-Quelltext
1:
if not aString[i] in [0..9then                    


Also beim "in". Was kann man da machen :(


Lannes - So 22.10.06 12:23

Hallo,


Delphi-Quelltext
1:
if not (aString[i] in ['0'..'9']) then                    


Gausi - So 22.10.06 12:24

oops - Probier mal if not aString[i] in ['0'..'9']


soisseteben - So 22.10.06 12:42

EDIT: Lannes hatte recht - die Klammern müssen noch rum.

Danke!