Подтвердить что ты не робот

Delphi isNumber

Есть ли метод в Delphi для проверки, является ли строка числом без привлечения исключения?

его для int parsing.

и исключение будет повышаться, если вы используете

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

Ответ 1

var
  s: String;
  iValue, iCode: Integer;
...
val(s, iValue, iCode);
if iCode = 0 then
  ShowMessage( has a number')
else
  ShowMessage( has not a number');

Ответ 2

function TryStrToInt (const S: string; out Значение: Integer): Boolean;

TryStrToInt преобразует строку S, которая представляет число целочисленного типа в десятичной или шестнадцатеричной нотации, в число, которое присваивается значению. Если S не представляет действительное число, TryStrToInt возвращает false; в противном случае TryStrToInt возвращает true.

Чтобы принять десятичные, но не шестнадцатеричные значения во входной строке, вы можете использовать такой код:

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

Ответ 3

Попробуйте выполнить эту функцию StrToIntDef()

С помощью

Преобразует строку, представляющую целое число (десятичная или шестнадцатеричная нотация) в число с ошибкой по умолчанию.

Паскаль

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

Edit

Только что проверил источник функции TryStrToInt() в Delphi 2007. Если Delphi 7 не имеет этой функции, вы можете написать вот так. Его просто полированный код для да-мягкого ответа

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

Ответ 4

используйте эту функцию

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;

конец;

Ответ 5

Для более старых версий Delphi из примера справки delphi 5:

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;

Ответ 6

В delphi 7 вы можете использовать процедуру Val. С помощью:

Единица: Система Синтаксис Delphi: procedure Val(S; var V; var Code: Integer);

S является строковым выражением; это должна быть последовательность символов, которые образуют подписанное действительное число.

V - переменная целочисленного типа или реального типа. Если V - переменная целочисленного типа, S должно образовать целое число.

Код - это переменная типа Integer.

Если строка недействительна, индекс нарушающего символа сохраняется в коде; иначе код будет равен нулю. Для строки с нулевым завершением позиция ошибки, возвращаемая в Code, больше, чем фактический нулевой индекс символа с ошибкой.

Ответ 7

В некоторых языках десятичные разделители различаются (например, "." используется на английском языке, а "," используется на русском языке). Для этих случаев для преобразования строки в реальный номер предлагается следующая процедура:

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;

Обновление

Поскольку @Pep упоминает исключения TryStrToFloat catch, но возвращает логическое значение. Поэтому правильный код:

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;

Ответ 8

XE4 и новее:

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

Не забывайте:

uses System.Character    

Ответ 9

При использовании процедуры

val (s, i, iCode);

и установить значение xd....

val ('xd', i, iCode)

в результате получим: 13

Ответ 10

Мне нравится эта функция StrToIntDef(number, 0) чтобы не возникало никаких ошибок исключений.

Ответ 11

Стандартные единицы Варианты

function VarIsNumeric(v:Variant):Boolean