Delphi中取整函数Round的Bug解决

Delphi中 Round函数有个Bug
一旦参数是形如 XXX.5这样的数时
如果 XXX 是奇数 那么就会 Round up
如果 XXX 是偶数 那么就会 Round down
例如 Round(17.5)=18
但是 Round(12.5)=12
下面的函数即可纠正这个 Bug 但是是临时性的
执行 DoRound(12.5) 结果为 13 正确

 

 function DoRound(Value: Extended): Int64; procedure Set8087CW(NewCW: Word); asm MOV Default8087CW,AX FNCLEX FLDCW Default8087CW end; const RoundUpCW = $1B32; var OldCW : Word; begin OldCW := Default8087CW; try Set8087CW(RoundUpCW); Result := Round(Value); finally Set8087CW(OldCW); end; end;

你可能感兴趣的:(function,UP,Delphi)