Q&A

  • 계산식의 차이점좀 알려 주세요???
어제 답변은 고마웠습니다????
아래 소스에서 보시면 값을 직접 입력했을때와 변수로 계산했을때
값은 똑 같은데 프로그램에서는 틀리다구 인식하네요???
왜 그런지 모르겠네요?

procedure TForm1.Button1Click(Sender: TObject);
Type
  TSetWrk110=Record
  OPENQ: double;
end;
  TSetParaf=Record
  TRQTY: double;
end;
var
  SetWrk110 : TSetWrk110;
  SetParaf   : TSetParaf;
  a,b,c: double;
begin
  a:= 267;
  b:= 0;
  c:= 266.8;
  SetParaf.TRQTY := 0.2;
  SetWrk110.OPENQ := ((a+b)-c);

  if ((SetParaf.TRQTY)  > (Setwrk110.OPENQ)) then
    ShowMessage('SetParaf.TRQTY 값이 크다')
  else if ((SetParaf.TRQTY) = (Setwrk110.OPENQ)) then
    ShowMessage('값이 같다');

end;
6  COMMENTS
  • Profile
    김지훈 2002.11.13 21:16
    진짜루 틀리네요!
    답변 감사합니다.

  • Profile
    이영우 2002.11.13 21:32
    Currency 타입을 사용하시면되기는합니다만 소수4자리밖에 계산 못합니다.

    꼭 Double 타입으로 해야만한다면

    필요한 소수자리에서 반올림해서 계산하시면됩니다.


  • Profile
    이영우 2002.11.13 20:40
    다음의 코드를 돌려보시면 이해하실수있을껍니다.



    procedure TForm1.Button1Click(Sender: TObject);
    Type
      TSetWrk110=Record
      OPENQ: double;
    end;
      TSetParaf=Record
      TRQTY: double;
    end;
    var
      SetWrk110 : TSetWrk110;
      SetParaf   : TSetParaf;
      a,b,c: double;
    begin
      a:= 267.0;
      b:= 0.0;
      c:= 266.8;
      SetParaf.TRQTY := 0.2;
      SetWrk110.OPENQ := ((a+b)-c);

      Memo1.Lines.Add(Format('%e', [SetParaf.TRQTY]));
      Memo1.Lines.Add(Format('%e', [SetWrk110.OPENQ]));

      if ((SetParaf.TRQTY)  > (Setwrk110.OPENQ)) then
        ShowMessage('SetParaf.TRQTY 값이 크다')
      else if ((SetParaf.TRQTY) = (Setwrk110.OPENQ)) then
        ShowMessage('값이 같다')
      else if ((SetParaf.TRQTY) < (Setwrk110.OPENQ)) then
        ShowMessage('SetParaf.TRQTY 값이 작다')
    end;




  • Profile
    빙구 2002.11.13 20:31
    코드 돌려보니까 글네엽.
    어..왜저러지? ^^
  • Profile
    김지훈 2002.11.13 20:12
    빙구님 말씀대로 라면 양쪽의 값이 1 이와도 한쪽이 크다고 나와야 되지
    않을까요???

  • Profile
    빙구 2002.11.13 19:33
    비교 연산자가 값만 비교를 행하는게 아니고 포인터값에 대한 연산도 행하는걸로 알고 있습니다. 따라서 님이 구조체를 사용하여 그 멤버를 비교함으로써 포인터주소값에 대한 비교가 이루어 졌다고 봅니다.
    SetWrk110보다 SetParaf가 나중에 변수로 선언되므로써, SetParaf는 더 주소값이 큰스택공간에 메모리가 할당되기 때문에 포인터값으로 봤을땐 SetParaf가 항상 크다 라고 나오는듯 합니다.