捐赠 | 广告 | 注册 | 发布 | 上传 | 关于我们    
  沪ICP备05001939号 DELPHI盒子 | 盒子论坛 | 盒子文章 | 盒子问答悬赏 | 最新更新 | 论坛检索 | 下载中心 | 高级搜索    
  精品专区 | 繁體中文 | 奖励公告栏 | 直通车账号登陆 | 关闭GOOGLE广告 | 临时留言    
盒子资源分类
全部展开 - 全部合拢
十进制小数转分数(无下载)
关键字:小数 分数 转 精度 计算
来 自:原创
平 台:Win2k/XP/NT,Win2003 下载所需:0 火柴
深浅度:初级 完成时间:2008/12/10
发布者:windmil 发布时间:2008/12/10
编辑器:DELPHI7 语  种:简体中文
分 类:科学 下载浏览:138/9087
加入到我的收藏
下载错误报错
登陆以后才能下载
 用户名:
 密 码:
自动登陆(30天有效)
图片如果打不开,说明流量不够了,请稍候下载……
function Fraction(decimal: double): string;
var
  intNumerator, intDenominator, intNegative: integer; // 声明整数变量为长整数
  dblFraction, dblDecimal, dblAccuracy, dblinteger: Double; // 声明浮点数为双精度
begin
  dblDecimal := decimal; //取得目标小数
  if trunc(decimal) = decimal then // 如果是整数,则直转
    result := floattostr(decimal)
  else
  begin
    if abs(decimal) > 1 then //如果小数大于1 如 10.24 ,进行拆解
    begin
      dblinteger := trunc(decimal); //取出整数部分
      dblDecimal := abs(frac(decimal)); //取出小数部分
    end
    else dblDecimal := decimal;

    dblAccuracy := 0.01; //设置精度
    intNumerator := 0; //初始分子为0
    intDenominator := 1; //初始分母为1
    intNegative := 1; //符号标记为正
    if dblDecimal < 0 then intNegative := -1; //如果目标为负,设置负标志位
    dblFraction := 0; //设置分数值为 0/1
    while Abs(dblFraction - dblDecimal) > dblAccuracy do //如果当前没有达到精度要求就继续循环
    begin
      if Abs(dblFraction) > Abs(dblDecimal) then //如果我们的分数大于目标
        intDenominator := intDenominator + 1 //增加分母
      else //否则
        intNumerator := intNumerator + intNegative; //增加分子
      dblFraction := intNumerator / intDenominator; //计算新的分数
    end;
   // edit2.Text := inttostr(intNumerator) + '/' + inttostr(intDenominator);
    if abs(decimal) > 1 then //如果小数大于1 如 10.24 ,进行拆解
      result := floattostr(dblinteger) + ' ' + inttostr(intNumerator) + '/' + inttostr(intDenominator)
    else
      result := inttostr(intNumerator) + '/' + inttostr(intDenominator);
  end;
end;
原作者
Written by:     Erik Oosterwal
'   Started on:     November 9, 2005
'   Completed on:   November 9, 2005
增加大于1的小数的转化
小数到分数的转化

By Erik Oosterwal   翻译: Zoologist
__________
下面将介绍一种小数转化为分数的简单方法,这种方法能将十进制的小数转化为分子与分母都是整数的分数,换句话说,这个算法能够自动判定循环节。任何十进制数值都能被转化为一个指定精度的分数。

     这个算法的根本原理是:一个分数对应一条直线的斜率。用数学语言描述就是:一条直线的斜率是无穷大(垂直于X轴)或者是(Y2-Y1) / (X2-X1),我们要做的就是找到2个整数,在指定的精度范围内接近这个斜率。对于正数来说,我们设置分子为0,分母为1,然后比较这个分数同给定的十进制数。如果我们的分数太小了(比如,我们选择的点在直线的下面),我们就加大分子的值直到这个分数太大(比如,这个点在直线的上方),之后我们在增加分母的大小直到这个点在直线下方。
如果我们的最终目标是无理数(无限不循环小数),这个算法将一直继续,增加分子和分母,直到最终结果在指定的精度上。
Google
 
本站原创作品,未经作者许可,严禁任何方式转载;转载作品,如果侵犯了您的权益,请联系我们
龙脉加密锁 15元起 Grid++Report 报表 申请支付@网
 相关文章
没有相关文章
相关评论
共有评论3条 当前显示最后3条评论
nihg 2008/12/12 15:46:04
http://www.begin.org.cn/tran/Fraction.rar 原文和译文的下载
windmil 2008/12/16 12:19:49
这是改编版,原来是vb的程序,增加了大于1的小数,及整数的判断
softbug 2009/1/15 21:17:33
有什么用呢
我要发表评论 查看全部评论
 
  DELPHI盒子版权所有 1999-2023 V4.01 粤ICP备10103342号-1 更新RSS列表