码迷,mamicode.com
首页 > Windows程序 > 详细

Delphi中取整函数Round的Bug解决

时间:2016-06-16 01:30:03      阅读:626      评论:0      收藏:0      [点我收藏+]

标签:

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

Delphi中取整函数Round的Bug解决

标签:

原文地址:http://www.cnblogs.com/findumars/p/5589556.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!