CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  语言基础/算法/系统设计

求realround函数的实现代码

楼主dragonzll()2006-03-04 14:13:42 在 Delphi / 语言基础/算法/系统设计 提问

如题...  
   
  谢谢 问题点数:20、回复次数:6Top

1 楼dragonzll()回复于 2006-03-04 20:27:09 得分 0

就是实数按小数位数四舍五入  
  realround(number,3)Top

2 楼zhangl_cn(和尚-修行)回复于 2006-03-04 23:01:36 得分 5

function   RealRound(number:Double;Bit:integer):Double;  
  var  
          i,j:integer;  
  begin  
          j:=10;  
          for   i:=1   to   bit-1   do     j:=j*10;  
          Result:=trunc(number*j+0.5)/j;  
  end;  
  Top

3 楼Delphi1985(Darkhorse)回复于 2006-03-05 09:31:43 得分 0

嗯,就是这样  
  按上面的算法Top

4 楼liangqingzhi(老之)回复于 2006-03-05 10:01:27 得分 5

Math单元的RoundTo函数Top

5 楼fairyhoodwater(fairyhood)回复于 2006-03-06 15:57:20 得分 5

别忘了在USE里加上Math,找上面的用就行Top

6 楼unsigned(僵哥(发站内消息,请附上链接或问题说明,否则不予回复))回复于 2006-03-06 16:26:36 得分 5

uses  
        math;  
  function   DRound(Value:double;cnt:byte):double;  
  var  
        fTmp:double;  
        nTmp:double;  
        k:int64;  
  begin  
        Result:=Value;  
        if   cnt>18   then   exit;  
        nTmp:=Power(10.0,cnt);  
        fTmp:=0.5;  
        fTmp:=fTmp/nTmp;  
        Result:=fTmp+Result;  
        Result:=Result*nTmp;  
        k:=0;  
        asm  
              fld   qword   ptr   Result  
              //__ftol   begin  
              push   ebp  
              mov   ebp,esp  
              LEA   ESP,k  
              wait  
              fstcw   word   ptr   [ebp-$04]  
              wait  
              mov   al,[ebp-$03]  
              or   [ebp-$04],$00000c01  
              fldcw   word   ptr   [ebp-$04]  
              fistp   qword   ptr   [ebp-$0c]  
              mov   [ebp-$03],al  
              fldcw   word   ptr   [ebp-$04]  
              mov   eax   ,[ebp-$0c]  
              mov   edx,[ebp-$08]  
              mov   esp,ebp  
              pop   ebp  
              //__ftol   end  
              push   esp  
              lea   esp,k  
              mov   [esp],eax  
              add   esp,4  
              mov   [esp],edx  
              mov   esp,ebp  
              pop   esp  
              fild   qword   ptr   k  
              fstp   qword   ptr   Result  
              fld   qword   ptr   nTmp  
              fdivr   qword   ptr   Result  
              fstp   qword   ptr   Result  
        end;  
  end;  
  function   DRoundUp(Value:double;cnt:byte):double;  
  var  
        fTmp:double;  
        nTmp:double;  
        k:int64;  
  begin  
        Result:=Value;  
        if   cnt>18   then   exit;  
        nTmp:=Power(10.0,cnt);  
        fTmp:=1;  
        fTmp:=fTmp/nTmp;  
        Result:=Result*nTmp;  
        k:=0;  
        asm  
              fld   qword   ptr   Result  
              //__ftol   begin  
              push   ebp  
              mov   ebp,esp  
              LEA   ESP,k  
              wait  
              fstcw   word   ptr   [ebp-$04]  
              wait  
              mov   al,[ebp-$03]  
              or   [ebp-$04],$00000c01  
              fldcw   word   ptr   [ebp-$04]  
              fistp   qword   ptr   [ebp-$0c]  
              mov   [ebp-$03],al  
              fldcw   word   ptr   [ebp-$04]  
              mov   eax   ,[ebp-$0c]  
              mov   edx,[ebp-$08]  
              mov   esp,ebp  
              pop   ebp  
              //__ftol   end  
              push   esp  
              lea   esp,k  
              mov   [esp],eax  
              add   esp,4  
              mov   [esp],edx  
              mov   esp,ebp  
              pop   esp  
              fild   qword   ptr   k  
              fstp   qword   ptr   Result  
              fld   qword   ptr   nTmp  
              fdivr   qword   ptr   Result  
              fstp   qword   ptr   Result  
        end;  
        if   Result<Value   then   Result:=Result+fTmp;  
  end;  
  function   DRoundDown(Value:double;cnt:byte):double;  
  var  
        fTmp:double;  
        nTmp:double;  
        k:int64;  
  begin  
        Result:=Value;  
        if   cnt>18   then   exit;  
        nTmp:=Power(10.0,cnt);  
        Result:=Result*nTmp;  
        k:=0;  
        asm  
              fld   qword   ptr   Result  
              //__ftol   begin  
              push   ebp  
              mov   ebp,esp  
              LEA   ESP,k  
              wait  
              fstcw   word   ptr   [ebp-$04]  
              wait  
              mov   al,[ebp-$03]  
              or   [ebp-$04],$00000c01  
              fldcw   word   ptr   [ebp-$04]  
              fistp   qword   ptr   [ebp-$0c]  
              mov   [ebp-$03],al  
              fldcw   word   ptr   [ebp-$04]  
              mov   eax   ,[ebp-$0c]  
              mov   edx,[ebp-$08]  
              mov   esp,ebp  
              pop   ebp  
              //__ftol   end  
              push   esp  
              lea   esp,k  
              mov   [esp],eax  
              add   esp,4  
              mov   [esp],edx  
              mov   esp,ebp  
              pop   esp  
              fild   qword   ptr   k  
              fstp   qword   ptr   Result  
              fld   qword   ptr   nTmp  
              fdivr   qword   ptr   Result  
              fstp   qword   ptr   Result  
        end;  
  end;Top

相关问题

  • 求函数malloc的实现源代码~
  • 问一个菜鸟问题,如何从使用函数的代码跳转到函数实现的代码?
  • 如何快速找到函数的实现代码?
  • 如何在C++ 中实现函数 realloc(),具体代码如下:
  • 有 printf(const char* format, ...) 该标准函数的实现代码吗?
  • 100分求C库函数实现代码
  • 如何得到库函数的实现代码?
  • 求一函数能实现下面的代码分析。。。。?急
  • 编写能直接实现strstr()函数功能的代码
  • 如果自己写代码实现这两个stdlib的函数

关键词

  • word
  • realround
  • ntmp
  • ebp
  • qword
  • esp
  • ftol
  • ftmp
  • ptr
  • mov

得分解答快速导航

  • 帖主:dragonzll
  • zhangl_cn
  • liangqingzhi
  • fairyhoodwater
  • unsigned

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo