Q&A

  • Trunc 함수의 오류?????




Trunc 함수 사용시 일단위에서 Round를 하는지 이상하게 나오내여???



procedure TForm1.Button1Click(Sender: TObject);

Var aa,cc : exTended;

bb : Int64;

begin

aa := 1000.0;

cc := (aa*0.001);

bb := Trunc(cc);

showmessage(IntToStr(bb));

end;





이렇게 했는데 원하는 값은 1 인데 0 이 나옵니다..

분명히 1000*0.001 은 1 입니다. 그런데....0으로..

이유좀 알려주세여..

대용할 수 있는 함수 있으시면 부탁드립니다.







2  COMMENTS
  • Profile
    델맨 2001.10.07 23:13
    궁금이 wrote:

    >

    >

    > Trunc 함수 사용시 일단위에서 Round를 하는지 이상하게 나오내여???

    >

    > procedure TForm1.Button1Click(Sender: TObject);

    > Var aa,cc : exTended;

    > bb : Int64;

    > begin

    > aa := 1000.0;

    > cc := (aa*0.001);

    > bb := Trunc(cc);

    > showmessage(IntToStr(bb));

    > end;

    >

    >

    > 이렇게 했는데 원하는 값은 1 인데 0 이 나옵니다..

    > 분명히 1000*0.001 은 1 입니다. 그런데....0으로..

    > 이유좀 알려주세여..

    > 대용할 수 있는 함수 있으시면 부탁드립니다.

    >



    실수 자료형중에 single, double, extended와 같이 소숫점 위치가 비고정인것은

    값의 범위에 따라 정밀도가 낮아지거나 높아집니다. 항상 오차를 가진다는

    뜻이죠. 이것은 델파이 뿐만아니라 모든 언어에 해당되는 문제입니다.

    1000 * 0.001 의 결과는 분명 1 이지만 실수형에서는 1000 이 999.9999.... 로

    저장될수 있습니다. 그래서 결과가 0.9999.... 가 되는것이죠.





  • Profile
    못난이 팬더소년 o,o 2001.10.07 11:10
    var aa,bb : integer;

    cc : Single;

    begin

    aa := 1000;

    cc := (aa*0.001);

    bb := Trunc(cc);

    showmessage(FloatToStr(cc));

    요렇게 바꾸시면 1나와요 ^^

    이유는 지도 몰라유 -.-

    초짜 팬더소년 올림 -.-a

    궁금이 wrote:

    >

    >

    > Trunc 함수 사용시 일단위에서 Round를 하는지 이상하게 나오내여???

    >

    > procedure TForm1.Button1Click(Sender: TObject);

    > Var aa,cc : exTended;

    > bb : Int64;

    > begin

    > aa := 1000.0;

    > cc := (aa*0.001);

    > bb := Trunc(cc);

    > showmessage(IntToStr(bb));

    > end;

    >

    >

    > 이렇게 했는데 원하는 값은 1 인데 0 이 나옵니다..

    > 분명히 1000*0.001 은 1 입니다. 그런데....0으로..

    > 이유좀 알려주세여..

    > 대용할 수 있는 함수 있으시면 부탁드립니다.

    >

    >

    >