다음의 코드의 결과 값이 잘 못된 것 같습니다.
델파이 버그인지 제가 잘 모르는 것지 알려주시면 감사하겠습니다.
//--델파이 버그(?) 코드
procedure TForm1.Button1Click(Sender: TObject);
var a,b,c:real;
begin
a := 3700;
b := 0.35;
c := trunc(a*b); => 결과는 1294 (원래는 1295가 정답)
ShowMessage(floatToStr(c));
end;
//--정상 작동하게 수정한 코드
procedure TForm1.Button1Click(Sender: TObject);
var a,b,c:real;
begin
a := 3700;
b := 0.35;
c := a*b;
c := trunc(c); => 1295
ShowMessage(floatToStr(c));
end;
왜 이런 차이가 발생할까요?
제 생각엔 델파이 버그처럼만 보입니다.
여러분의 의견 부탁드립니다.
caption := inttohex(trunc(strtofloat(edit1.text) * 1000), 4); 코드를 통해 겪었습니다.
edit1에 0.001을 넣었더니...값이 0이 나오는 것이 아닙니까?
그때 발견한 것은.. 오픈다이얼로그 였습니다.
폼에 있던 오픈 다이얼로그를 빼버리니까..맞게 1이 나오는 것이여요..
지금 님의 코딩을 테스트한 결과
dialog box가 있을때는 값이 1294로 나옵니다.
dialog box를 빼면 1295 나옵니다.
real을 currency로 선언하면 dialog box 있어도 1295 나옵니다.
일케 해주면 real로 선언해도 dialog box가 있어도 1295로 나옵니다.
라는 결론을 얻을 수 있습니다..
가장 좋은 방법은 Trunc 취할때..수식 자체를 Trunc를 취하지 마시고..
일단 변수로 받으신 후에..그 변수를 Trunc 취하는 것입니다.
currency형도 예전에..어떤 계산에서 값이 틀리게 나온 적이 있었기때문에
단지 currency로 선언만 해주는 걸로는 권해드리지 않겠습니다.