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 正确

 

 

[delphi] view plain copy
 
  1. function DoRound(Value: Extended): Int64;  
  2.   procedure Set8087CW(NewCW: Word);  
  3.   asm  
  4.     MOV Default8087CW,AX  
  5.     FNCLEX  
  6.     FLDCW Default8087CW  
  7.   end;  
  8. const  
  9.   RoundUpCW = $1B32;  
  10. var  
  11.   OldCW : Word;  
  12. begin  
  13.   OldCW := Default8087CW;  
  14.   try  
  15.     Set8087CW(RoundUpCW);  
  16.     Result := Round(Value);  
  17.   finally  
  18.     Set8087CW(OldCW);  
  19.   end;  
  20. end;  

 

http://blog.csdn.net/chaijunkun/article/details/5519153

posted @ 2016-06-16 00:30  findumars  Views(575)  Comments(0Edit  收藏  举报