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으로..
이유좀 알려주세여..
대용할 수 있는 함수 있으시면 부탁드립니다.
>
>
> 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.... 가 되는것이죠.