xe2 versiones que para full embarcadero creadores delphi delphi-7

versiones - Delphi esNúmero



que es delphi 2010 (10)

Cuando usas procedimiento

val (s, i, iCode);

y establecer valor xd ....

val (''xd'', i, iCode)

como resultado obtenemos: 13

¿Hay un método en Delphi para verificar si una cadena es un número sin generar una excepción?

Es para el análisis int.

y una excepción aumentará si uno usa el

try StrToInt(s); except //exception handling end;


En algunos idiomas, los separadores decimales son diferentes (por ejemplo, ''.'' Se usa en inglés y '','' se usa en ruso). Para estos casos, para convertir una cadena a un número real, se propone el siguiente procedimiento:

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;

Actualizar

Como @Pep mencionó las excepciones de captura TryStrToFloat, pero devuelve un valor booleano. Entonces el código correcto es:

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;


En delphi 7 puedes usar el procedimiento Val . De la ayuda:

Unidad: sistema Delphi sintaxis: procedure Val(S; var V; var Code: Integer);

S es una expresión de tipo cadena; debe ser una secuencia de caracteres que forman un número real firmado.

V es una variable de tipo entero o real. Si V es una variable de tipo entero, S debe formar un número entero.

El código es una variable de tipo entero.

Si la cadena no es válida, el índice del carácter infractor se almacena en el Código; de lo contrario, el código se establece en cero. Para una cadena terminada en nulo, la posición de error devuelta en el Código es una más grande que el índice real basado en cero del carácter erróneo.


Para versiones anteriores de Delphi de delphi 5, ejemplo de ayuda:

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;


Prueba esta función StrToIntDef()

De ayuda

Convierte una cadena que representa un número entero (notación decimal o hexadecimal) a un número con error predeterminado.

Pascal

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

Editar

Acabo de verificar la fuente de la función TryStrToInt() en Delphi 2007. Si Delphi 7 no tiene esta función, puede escribir así. Es solo un código pulido para una respuesta suave

function TryStrToInt(const S: string; out Value: Integer): Boolean; var E: Integer; begin Val(S, Value, E); Result := E = 0; end;


Variantes de la unidad estándar

function VarIsNumeric(v:Variant):Boolean


XE4 y más reciente:

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

No olvides

uses System.Character


función TryStrToInt (const S: string; out Valor: Integer): Boolean;

TryStrToInt convierte la cadena S, que representa un número de tipo entero en notación decimal o hexadecimal, en un número, que se asigna a Valor. Si S no representa un número válido, TryStrToInt devuelve false; de lo contrario, TryStrToInt devuelve true.

Para aceptar valores decimales pero no hexadecimales en la cadena de entrada, puede usar código como este:

function TryDecimalStrToInt( const S: string; out Value: Integer): Boolean; begin result := ( pos( ''$'', S ) = 0 ) and TryStrToInt( S, Value ); end;


usa esta función

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;

fin;


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'');