Delphi isNumber
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');
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;
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;
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;
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.
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;
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;
XE4 et plus récent:
for ch in s do
TCharacter.IsNumber(ch);
N'oubliez pas:
uses System.Character
quand vous utilisez la procédure
val (s, i, iCode);
et définir la valeur xd ....
val ('xd', i, iCode)
résultat: 13
variantes d'unités standard
function VarIsNumeric(v:Variant):Boolean