2013-11-26 3 views
0

문자열에 부동 소수점이 포함되어 있는지 어떻게 알 수 있습니까? 예 : '0.004'문자열에 float가 포함되어 있는지 검색 하시겠습니까?

StrToFloat을 사용하지 않고 해당 기능이 느리기는하지만 문자를 반복하여 사용하기 때문에. 문자열은 양의 정수가 아닌 부동 경우이 확인됩니다

function IsInteger(const S: String): Boolean; 
var 
    P: PChar; 
begin 
    P := PChar(S); 
    Result := True; 
    while not (P^ = #0) do 
    begin 
    case P^ of 
     '0'..'9': Inc(P); 
    else 
     Result := False; 
     Break; 
    end; 
    end; 
end; 

..

+0

어떻게 천천히 찾았습니까? 그리고 당신이 원하는 것을하는 것을 방해하는 것은 무엇입니까? – TLama

+1

@TLama 0에서 10000000 사이의 루프에서 실행하면 무엇을 의미하는지 알 수 있습니다. 그들은 예외를 던질 것은 말할 것도 없습니다. –

+1

글쎄, IntToStr과 StrToInt는 플로트에 대해 물어볼 때 여기서는 아무런 의미가 없다. 아무 일도하지 말고 잠시 기다리십시오. –

답변

5

나는) TryStrToFloat를 (사용합니다 :

if TryStrToFloat(str, value, FormatSettings) then 
    .... 

당신이 넓은 기본 시스템을 사용할 준비가되어있는 경우 형식 설정을 사용하면 최종 매개 변수를 생략 할 수 있습니다.

if TryStrToFloat(str, value) then 
    .... 
+0

이것은 Try Except에서 StrToFloat를 그냥 감싸줍니다. –

+2

정말요? Delphi 2009에서는 TextToFloat를 호출합니다. – TLama

+0

@TLama 예, 확신합니다. 부동 소수점 변환을 시도하고 예외를 throw하지 않습니다. –

2

여기에서 RegEx를 사용할 수 있습니까? 예 :

([+-]?[0-9]+(?:\.[0-9]*)?) 
+0

예를 들어 1e1은 어떻습니까? –

+0

더 나은 점검 http://www.regular-expressions.info/floatingpoint.html –

0

이 질문의 문제점은 "너무 느리다"는 것을 많이 말하지 않는다는 것입니다. 프로파일 러는 당신에게 무엇을 말합니까? 입력 데이터에 대한 충분한 지식이 있습니까? 다른 표기법은 무엇입니까 (예 : 6.02e23)?

입력 데이터가 대부분 잡음 인 경우 일반 표현식 (대답 : here)을 사용하면 첫 번째 필터로만 개선 될 수 있습니다. 그런 다음 David's answer에 설명 된대로 실제로 전화 번호를 얻기위한 두 번째 단계를 추가 할 수 있습니다.