Delphi知识中心
www.delphi.ee
提供Delphi技术知识
与Delphi程序员共同进步


在线服务QQ:99923144 随时恭候您的光临
首页 基础知识 WIN系统 组件使用 组件开发 数据库 ACTIVEX 多媒体技术 网络技术 关于
文章类别:基础知识    你尚未登陆,会员功能无法使用,请从 网站首页 登陆。
  取整函数round、trunc、ceil和floor  
 
delphi的取整函数round、trunc、ceil和floor
=========================================================
1.Round(四舍六入五留双)
功能说明:对一个实数进行四舍五入。(按照银行家算法)

例:
var
i, j: Integer;
begin
i := Round(1.5); // i等于2
j := Round(2.5); // j等于2
end;

在Delphi中使用Round函数得到的答案有时与我们所预期的会不太一样:采用的是四舍六入五留双。即当舍或入位大于或小于五时按四舍五入来处理

,而当舍或入位等于五时,就要看前面一位是什么,根据奇进偶不进,它总是返回一个偶数值。
例:
i:= Round(11.5)//i等于12
i:= Round(10.5)//i等于10

这种Round其实是按照银行家算法,统计学上一般都用这种算法,比传统的"四舍五入"要科学。
如果要使用传统的"四舍五入"方法,可以使用下面函数:
function RoundClassic(R: Real)

2.trunc(取得X的整数部分)
如:trunc(-123.55)=-123, floor(123.55)=123

3.ceil(取得大于等于X的最小的整数)

如:ceil(-123.55)=-123, ceil(123.15)=124

4.floor(取得小于等于X的最大的整数)

如:floor(-123.55)=-124,floor(123.55)=123

注:floor和ceil是math unit里的函数,使用前要先Uses Math

=========================================================
补充:
Int function

Returns the integer part of a real number.
arithmetic routines

function Int(X: Extended): Extended;

Description

Int returns the integer part of X; that is, X rounded toward zero. X is a real-type expression.

Int
  功能说明:返回参数中的整数部分。

  参考实例:

  var

    R: Real;

  begin

    R := Int(123.456); // R等于 123.0

    R := Int(-123.456); // R等于 -123.0

  end;

===============================================

Delphi取整函数 math.floor math.ceil System.int
(2008-12-28 04:03:21)
转载
标签:
it
分类: 编程学习

math.floor math.ceil System.int

math.floor 返回不大于的最大整数, 是4舍5入的计算,入的时候是到大于它的整数

System.int 和 math.ceil 则是不小于他的最小整数

所以, VB的int等于delphi的math.floor

Delphi取整函数
floor 和 ceil 是 math unit 里的函数,使用前要先 Uses Math。
trunc 和 round 是 system unit 里的函数,缺省就可以用。
floor 直接往小的取,比如 floor(-123.55)=-124,floor(123.55)=123
trunc 直接切下整数,比如 trunc(-123.55)=-123, floor(123.55)=123
ceil 直接往大的取,比如 ceil(-123.55)=-123, ceil(123.55)=124
round 计算四舍五入,比如 round(-123.55)=-124,round(123.55)=124
function Int(X: Extended): Extended;//取整
function Round(X: Extended): Int64;//四舍五入
function Trunc(X: Extended): Int64;//将小数无条件舍去
因为Extended<10字节>,所以trunc只能执行小数点前5位
Trunc(12345.123456789)可以 ,Trunc(123456.123456789)出错Constant expression violates subrange bounds常量表达式超出子界范围


//Delphi的Trunc的精度解决
function GetTrunc(dvalue: Double): Integer;
var val: Double;
begin
val := 1e-10;
result := Trunc(dvalue + val);
end;

procedure TForm1.Button4Click(Sender: TObject);
var d: Double;
s: String;
begin
d := 1.4;
s := FormatFloat('0.00', Trunc(d * 10));
Memo1.Lines.Add(s);
// 返回13.00
s := FormatFloat('0.00', GetTrunc(d * 10));
Memo1.Lines.Add(s);
// 返回14.00
end;
=========================================================

 

在线服务QQ:99923144 Delphi程序员QQ群(139442)
Delphi知识中心 www.delphi.ee 最专业的Delphi技术资料网站