Q&A

  • 숫자인지 구별하는 함수가 없는지요?(질문)
조건문에 숫자이면 조건을 실해하게 하려고 합니다.

숫자외의 글이 들어오면 조건문을 실행하게 하지않으려 하는데 혹시 델파이에

그런함수 없나요?

예를 들어 파워빌더의 isnumber같은 함수를 아시는 분 알려주세요.

3  COMMENTS
  • Profile
    조복기 2001.01.13 23:46


    안녕하세염~



    그냥 간단하게 자체 val함수 사용하세염..

    문자열안에 숫자만 있는지여부를 체크합니다..

    아래는 헬프 예제인데

    숫자형으로 변환가능여부를 돌려주는 프로시져임다..

    0을 돌려주면 문자없는 숫자임다..



    좋은하루되세염



    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;





    써니 wrote:

    > 조건문에 숫자이면 조건을 실해하게 하려고 합니다.

    > 숫자외의 글이 들어오면 조건문을 실행하게 하지않으려 하는데 혹시 델파이에

    > 그런함수 없나요?

    > 예를 들어 파워빌더의 isnumber같은 함수를 아시는 분 알려주세요.

  • Profile
    공성환 2001.01.13 23:03
    저는 이런식으로 하는데...

    if StrToIntDef(변수명,-1) = -1 then

    begin

    숫자가아니네....

    end

    else

    begin

    숫자이네요...

    end;

    써니 wrote:

    > 조건문에 숫자이면 조건을 실해하게 하려고 합니다.

    > 숫자외의 글이 들어오면 조건문을 실행하게 하지않으려 하는데 혹시 델파이에

    > 그런함수 없나요?

    > 예를 들어 파워빌더의 isnumber같은 함수를 아시는 분 알려주세요.

  • Profile
    xdelphi 2001.01.13 21:44
    써니 wrote:

    > 조건문에 숫자이면 조건을 실해하게 하려고 합니다.

    > 숫자외의 글이 들어오면 조건문을 실행하게 하지않으려 하는데 혹시 델파이에

    > 그런함수 없나요?

    > 예를 들어 파워빌더의 isnumber같은 함수를 아시는 분 알려주세요.



    이렇게하시면 될걸요?



    function IsNum(cValue:String):boolean;

    Function Compare(cSubstr,cString:String):Boolean;

    begin

    if pos(cSubStr,cString) <> 0 then result:=True

    else result:=False;

    end;

    Var

    i,Pi_Dot,Pi_minus,PI_Plus: Integer;

    st : String;

    begin

    result:=True;

    Pi_Dot:=0;Pi_minus:=0;PI_Plus:=0;

    for i:=1 to Length(cValue) do begin

    if not Compare(Copy(cValue,i,1),'-+0123456789.') then begin

    result:=False;

    exit;

    end;



    if Copy(cValue,i,1)='.' then begin

    Pi_Dot:=Pi_Dot+1;

    if pi_Dot > 1 then begin result:=False;exit;end;

    end;



    if (Copy(cValue,i,1)='-') AND (I<>1) then begin

    result:=False;

    exit;

    end

    else if Copy(cValue,i,1)='-' then begin

    Pi_Minus:=Pi_Minus+1;

    if PI_Minus > 1 then begin result:=False;exit;end;

    end;



    if (Copy(cValue,i,1)='+') AND (I<>1) then begin

    result:=False;

    exit;

    end

    else if Copy(cValue,i,1)='+' then begin

    Pi_Plus:=Pi_Plus+1;

    if pi_Plus > 1 then begin result:=False;exit;end;

    end;

    if (PI_Plus > 0) and (PI_Minus > 0) then begin result:=False;exit;end;

    end;

    end;



    procedure TForm1.Button6Click(Sender: TObject);

    begin

    case IsNum(Edit1.Text) of

    True : ShowMessage('숫자');

    False : ShowMessage('문자');

    end;

    end;