델파이는 기본적으로 IEEE에 등록된 Banker's Rounding 을 사용한다.
자세한 이론은 제쳐두고 일단 이건 결과물을 무조건 짝수에 맞추는 방법이다
즉 11.5 - > 12, 12.5 -> 12 가 된다
그러나 수학연산할땐 이 방법을 잘 쓰진 않는데(사실 Banker's Rounding 이 오차가 작다....)
FPU 의 Control Bit를 바꿔 이를 수정할 수 있다
procedure TForm2.FormCreate(Sender: TObject);
var
Val : Integer;
Num : Extended;
Const
MathRoundMode : Word = $1B32;
begin
Num := 2.5;
Set8087CW(MathRoundMode);
Val := Round(Num);
Set8087CW(Default8087CW);
OutputDebugString(PChar(IntToStr(Val)));
end;
FPU의 설정을 바꾸는 것이기 때문에 특별한 경우가 아니라면 쓰고나서 돌려놓자!
Ps. 왠지모르게 변수대신 상수로 넣으면 안되더라 =_=;