Delphi isNumber

Est-il une méthode Delphi pour vérifier si une chaîne est un nombre sans lever d'exception?

son int de l'analyse.

et une exception élever si on utilise la

try
  StrToInt(s);
except
  //exception handling
end;
19
demandé sur kobik 2011-02-03 12:22:39

10 réponses

var
  s: String;
  iValue, iCode: Integer;
...
val(s, iValue, iCode);
if iCode = 0 then
  ShowMessage('s has a number')
else
  ShowMessage('s has not a number');
22
répondu da-soft 2014-04-08 05:16:06

function TryStrToInt(const S: string; Valeur: Integer): Boolean;

TryStrToInt convertit la chaîne S, qui représente un nombre entier en notation décimale ou hexadécimale, en un nombre, qui est assigné à la valeur. Si S ne représente pas un nombre valide, TryStrToInt retourne false; sinon TryStrToInt retourne true.

Pour accepter la virgule, mais pas des valeurs hexadécimales dans la chaîne d'entrée, vous pouvez utiliser un code comme ceci:

function TryDecimalStrToInt( const S: string; out Value: Integer): Boolean;
begin
   result := ( pos( '$', S ) = 0 ) and TryStrToInt( S, Value );
end;
52
répondu ba__friend 2015-08-10 05:02:48

Essayez cette fonction StrToIntDef()

à Partir de l'aide

Convertit une chaîne de caractères qui représente un nombre entier (notation décimale ou hexadécimale) en un nombre avec erreur par défaut.

Pascal

function StrToIntDef(const S: string; Default: Integer): Integer;

Modifier

vient de vérifier la source de TryStrToInt() fonction de Delphi 2007. Si Delphi 7 n'a pas cette fonction, vous pouvez écrire comme ceci. C'est juste un code poli pour da-soft answer

function TryStrToInt(const S: string; out Value: Integer): Boolean;
var
  E: Integer;
begin
  Val(S, Value, E);
  Result := E = 0;
end;
16
répondu Bharat 2011-02-03 10:56:41

Pour les anciennes versions de Delphi delphi 5 exemple d'aide:

uses Dialogs;
var 

  I, Code: Integer;
begin
  { Get text from TEdit control }
  Val(Edit1.Text, I, Code);
  { Error during conversion to integer? }
  if Code <> 0 then
    MessageDlg('Error at position: ' + IntToStr(Code), mtWarning, [mbOk], 0);
  else
    Canvas.TextOut(10, 10, 'Value = ' + IntToStr(I));   
end;
2
répondu GJ. 2011-02-03 10:17:31

dans delphi 7 vous pouvez utiliser le Val procédure. De l'aide:

Unité: Système syntaxe Delphi:procedure Val(S; var V; var Code: Integer);

S est une expression de type chaîne de caractères; il doit s'agir d'une séquence de caractères qui forment un nombre réel signé.

V est une variable de type entier ou réel. Si V est une variable de type entier, S doit former un nombre entier.

Code est une variable de type entier.

si la chaîne est invalide, la l'index du caractère offensant est stocké dans le Code; sinon, le Code est mis à zéro. Dans le cas d'une chaîne sans fin, la position d'erreur retournée dans le Code est plus grande que l'indice réel à base zéro du caractère en erreur.

2
répondu Robert Niestroj 2012-07-31 07:24:16

utiliser cette fonction

function IsNumber(N : String) : Boolean;
var
I : Integer;
begin
Result := True;
if Trim(N) = '' then
 Exit(False);

if (Length(Trim(N)) > 1) and (Trim(N)[1] = '0') then
Exit(False);

for I := 1 to Length(N) do
begin
 if not (N[I] in ['0'..'9']) then
  begin
   Result := False;
   Break;
 end;
end;

end;

2
répondu sina 2017-04-26 12:44:47

Dans certaines langues, les séparateurs décimaux sont différentes (par exemple,"."est utilisé en anglais et", " est utilisé en russe). Pour ces cas de convertit une chaîne en nombre réel, la procédure suivante est proposée:

function TryStrToFloatMultylang(const S : String; out Value : Extended) : Boolean;
var
  dc : char;
begin
  Result := false;
  dc := DecimalSeparator;
  DecimalSeparator := '.';
  try
    Result := TryStrToFloat(S, Value);
  except
    DecimalSeparator := ',';
    Result := TryStrToFloat(S, Value);
  end;
  DecimalSeparator := dc;
end;

mise à Jour

comme @Pep a mentionné trystrtofloat catch exceptions, mais il renvoie la valeur booléenne. Donc le code correct est:

function TryStrToFloatMultylang(const S : String; out Value : Extended) : Boolean;
var
  dc : char;
begin
  Result := false;
  dc := DecimalSeparator;
  DecimalSeparator := '.';
  Result := TryStrToFloat(S, Value);
  if not Result then begin
    DecimalSeparator := ',';
    Result := TryStrToFloat(S, Value);
  end;
  DecimalSeparator := dc;
end;
1
répondu Ivan Z 2015-04-03 17:26:34

XE4 et plus récent:

for ch in s do
   TCharacter.IsNumber(ch);

N'oubliez pas:

uses System.Character    
1
répondu zawuza 2018-05-31 09:21:49

quand vous utilisez la procédure

val (s, i, iCode);

et définir la valeur xd ....

val ('xd', i, iCode)

résultat: 13

0
répondu androschuk.a 2013-11-01 08:40:55

variantes d'unités standard

function VarIsNumeric(v:Variant):Boolean
-1
répondu Andrey Rubanko 2014-03-18 06:01:10