Delphi中取整函数Round的Bug解决

Posted 朝闻道

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

以上是关于Delphi中取整函数Round的Bug解决的主要内容,如果未能解决你的问题,请参考以下文章

matlab中小数如何取整?

java中如何取整?

delphi的取整函数roundtruncceil和floor

delphi 取整函数

matlab中小数如何取整?

sql 中取整,四舍五入取整,向下取整,向上取整。