Avatar billede compilos Nybegynder
19. december 2000 - 15:32 Der er 10 kommentarer og
1 løsning

Isnumeric - Haster

Er der ikke en funktion i delphi der kan teste om det er et tal man har med gøre. F.eks. i VB - Isnumeric. Hvis ikke, hvad gør jeg så.
Avatar billede speedy Nybegynder
19. december 2000 - 15:37 #1
Er det en variabel du snakker om eller et edit-felt eller hvad?

Hvis det er et editfelt, kan du bruge StrToIntDef(Edit1.Text, 0);

Så får du det hvertfald lavet til et tal, og hvis det ikke er et tal, bliver det 0, altså det du skrev efter kommaet.

/SpEeDy
Avatar billede compilos Nybegynder
19. december 2000 - 15:41 #2
Jeg skal teste om det er et tal, hvis det er - skal jeg indsætte det i en database ellers skal der komme en fejlmeddelse.
Avatar billede dj Nybegynder
19. december 2000 - 15:43 #3
Tjah.. det kunne laves sådan her:


function IsNum(Value:String):Boolean;
var
  Code: Integer;
  Tmp: Integer;
begin
  Val(Value,tmp,Code);
  Result:=Code=0;
end;
Avatar billede borrisholt Novice
19. december 2000 - 16:01 #4
Hej

Jeg kender ikke til at der findes en så funktion i Delphi men du kan lave en selv :

function IsNumeric(v : Variant) : Boolean;
var
  i : Integer;
  s : String;
begin
  i:= VarType(V) and varTypeMask;
  result := (i >= varSmallint) and (i<=varCurrency);

  if not result then
    result := i= varByte;

  if not result then
  begin
    if i= varString then
    s:=v;
    result := true;
    try
      StrToFloat(s);
    except
      result := false;
    end;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if IsNumeric(\'5,444\') then
    Caption := \'\';
end;


Jens B
Avatar billede borrisholt Novice
19. december 2000 - 16:02 #5
dj  > Din løsning virker ikke for di du ikke kan skrive IsNum(5.55) eller IsNum(5). Til det formål er du nødtil at bruge en variant !

Jens B
Avatar billede borrisholt Novice
19. december 2000 - 16:05 #6
du kan også kalde :

  if IsNumeric(5.444) then
    Caption := \'\';

  if IsNumeric(5) then
    Caption := \'\';

præcis som i VB (Jeg slog den lige efter i MSDN)

Jens B
Avatar billede dj Nybegynder
19. december 2000 - 16:09 #7
Borrisholt>> den virker skam til de fleste formål, der hvor jeg har haft brug for den er i forb. med strings og der er alt det du laver slet ikke nødvendigt .. man kalder den bare

if isNum(stringvar)= true then //dosomething else //dosomethingelse;

og hvis du ikke kalder den med en stringværdi men derimod med en talværdi som Input er det så ikke logisk at den er nummerisk ?
Avatar billede borrisholt Novice
19. december 2000 - 16:15 #8
DJ> Så langt har du ret .... jeg læste spørgsnålet sådan at spørger vil have en Delphi pendant til VB\'s Isnumeric(), til det kan man kun bruge en variant ....

Anyway skal man bare teste om en strens er en heltals værdi så vil jeg også gøre noget i retning af det du anviser :-)

JEns B
Avatar billede dj Nybegynder
19. december 2000 - 17:57 #9
borrisholt>> heh ok :)
Avatar billede compilos Nybegynder
20. december 2000 - 14:43 #10
Det må være DJ, der får point.
TAK
Avatar billede mbsnet Nybegynder
11. februar 2007 - 22:11 #11
//et 7 år for sent alternativ *s*
//- hvis det er ligemeget med punktum'et

function isNumeric(theStr:string):boolean;
var i:integer;ch:byte;
begin result:=true;i:=0;
if theStr='' then result:=false else
  while i<length(theStr) do begin
  i:=i+1;ch:=ord(theStr[i]);
  if (ch<48) or (ch>57) then begin result:=false;exit;end;
  end;
end;
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester