Q&A

  • 연산이 이상합니다..
안녕 하세요...
필요할때마다 와서 많은 걸 배워 가네요...
모든 분들께 감사합니다..

다름이 아니라... 초등학생도 다 하줄 아는 덧셈 뺄셈을 프로그램이 못하네요..
함 봐주세요..

procedure TfrmPmmjjegoF10.grdF01Display(Sender: TObject);
var
  aRow : LongInt;
  hJaego, aIpgo, aChgo, aCtrl, aIpgoP, aChgoP, aCtrlP, aJaego,  aJaegoP:Double;
begin
  With qrH Do Begin
    First;
    While Not qrH.Eof Do Begin
      qrD.Filtered:= False;
      qrD.Filter:= '[JjCode] = '''+ Fieldbyname('JjCode').AsString +'''';
      qrD.Filtered:= True;
      qrP.Filtered:= False;
      qrP.Filter:= '[JjCode] = '''+ Fieldbyname('JjCode').AsString +'''';
      qrP.Filtered:= True;
      if aParam1 <> '1' then begin
        hJaego := 0; aIpgo := 0; aChgo := 0; aCtrl := 0;
        aIpgoP := 0; aChgoP := 0; aCtrlP := 0; aJaego := 0; aJaegoP := 0;
        aIpgoP := qrP.Fieldbyname('Ipgo').AsFloat;
        aChgoP := qrP.Fieldbyname('Chgo').AsFloat;
        aCtrlP := qrP.Fieldbyname('Ctrl').AsFloat;
        aIpgo := qrD.Fieldbyname('Ipgo').AsFloat;
        aChgo := qrD.Fieldbyname('Chgo').AsFloat;
        aCtrl := qrD.Fieldbyname('Ctrl').AsFloat;
        aJaegoP := aIpgoP-aChgoP+aCtrlP;
        aJaego := aIpgo-aChgo+aCtrl;
//  밑에는 생략 하겠습니다.
     위에 보시면 aIpgoP := 3600 이 들어 갑니다.
     aChgoP := 3600 이 들어 갑니다.
     aCtrlP := 0 이 들어 갑니다.
     이세가지를 연산을 합니다.
     aJaegoP := -aChgoP+aIpgoP+aCtrlP 하면 당연히 "0" 이 나와야 합니다.
     그런데 이상하게 -4.5 가 나옴니다.
     실 데이타로는 -4.51222312332e-13 이란 값이 들어갑니다.
     이게 무슨 경우 일까요...

사용 데이타베이스는 MS-SQL 7.0 입니다.
그리고 모두 Float 형으로 되어 있는 데이타들입니다.
제발 알려 주세요...


1  COMMENTS
  • Profile
    정형준 2002.07.27 10:44
    -4.51222312332e-13 는 - 0.0000000000004512.... 이니까...

    제 생각엔,,,
    입고, 출고 등의 값이 정수형이라면
    Round 함수를 사용하여 연산하면 될것 같습니다.