Q&A

  • 형변환..에 대해서.
지금 현재 RS232통신으로 문장을 읽어와서 스트링 그리드에 해당 값을 집어넣고 있습니다.
예) 읽어들이는 문자열 : 가    나    다    라    마    
                                 10    20    30    40    50  

   스트링 그리드에 저장(_문자는 공백을 의미)
   가____  10____  10
   나____  20____  20
   다____  30____  30
   라____  40____  40
   마____  50____  50

첫번째 필드와 두번째 필드는 6씩 끊어서 집어넣었고 세번째 필드는 두번째 필드 값들에서 공백을 제거한 값을 집어 넣었는데요..

각 셀들의 값은 현재 string형이자나요..
이걸 double형으로 바꿔서 더할려고 해서..

var
i, sum : double;
begin
for i := 0 to grid.rowcount-1 di begin
     sum := sum + strtofloat(grid.cell[2,i]);

이런식으로 했는데..
''' is not a calid float value이런식으로 에러가 나오는데요..
그래서 스트링 그리드에다가 읽어들인 값을 안넣고 123을 넣어서 해봤는데..
이때는 변환이 잘 되더라구요..아무 에러 없이..
무슨 조환지를 잘 모르겠어요..
대충이라도 해결할수있게끔 조언좀 해주세요..
두서없는 글 읽어주셔서 고맙습니다..
3  COMMENTS
  • Profile
    srookie 2006.04.28 23:38
    안녕하세요.
    제가 보기에는 Grid의 Cell값중에 ''(셀에 아무값도 들어있지 않음)이 있나봅니다.
    StrToFloat 함수를 쓰지 마시고, StrToFloatDef 함수를 사용하시면 좀 더 안전하게 작업할 수 있을 것 같네요.
    자세한 사항은 Help를 참조하세요.
    즐프하세요.

  • Profile
    델파이-델짱 2006.04.29 06:51
    안녕하세요
    델 5이상에서는 StrToFloatDef  함수가 먹힙니까?
    델5에서는 안먹는데 ...
  • Profile
    이해경 2006.05.03 18:01
    사용자 정의 함수를 하나 만들어 쓰시는 것도 방법일 것 같습니다.
    속도는 그냥 형변환 보다는 느리겠지만 그렇게 많은 오버헤드를 발생시키는 것도 아니고,
    보통은 Cell에 값을 넣을 때, Format함수를 사용해 넣기 때문에 단순히 형변환을 하는
    경우 오류가 많이 발생해 저는 아래와 같은 함수를 만들어 사용합니다.


    function MyFloat(S : String) : Double
    Var
      i : integer;
      W : String;
    begin
      if S = '' then
      begin
        Result := 0;
        Exit;
      end;

      for i := 1 to Length(S) do
      begin
        if S[i] in ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '.'] then
          W := W + S[i]
      end;
      Result := StrToFloat(W);
    end;