delphi 浮点类型比较,判断是否为零

浮点类型比较,判断是否为零

代码

比较浮点数

procedure TForm1.Button1Click(Sender: TObject);
var
  d1, d2: Double;
begin
  d1 := 1.2345;
  d2 := 1.2346;
  //判断浮点数是否相等(误差小于0.0001)
  if SameValue(d1, d2, 0.0001) then
    Memo1.Lines.Add('相等')
  else
    Memo1.Lines.Add('不相等');

  //比较浮点数大小
  if CompareValue(d1, d2) < 0 then
    Memo1.Lines.Add('d1小于d2')
  else if CompareValue(d1, d2) > 0 then
    Memo1.Lines.Add('d1大于d2')
  else
    Memo1.Lines.Add('d1等于d2');
end;

判断是否为零

procedure TForm1.Button2Click(Sender: TObject);
var
  d: Double;
begin
  d := 0.000001;
  //用SameValue判断是否等于0
  if SameValue(d, 0) then
    Memo1.Lines.Add('SameValue 等于0')
  else
    Memo1.Lines.Add('SameValue 不等于0');

  //用IsZero判断是否等于0
  if IsZero(d) then
    Memo1.Lines.Add('IsZero 等于0')
  else
    Memo1.Lines.Add('IsZero 不等于0');

  //判断是否等于0(误差小于0.0001)
  if IsZero(d, 0.0001) then
    Memo1.Lines.Add('误差小于0.0001 等于0')
  else
    Memo1.Lines.Add('误差小于0.0001 不等于0');
end;

方法

System.Math.SameValue

function SameValue(const A, B: Extended; Epsilon: Extended): Boolean;
function SameValue(const A, B: Double; Epsilon: Double): Boolean;
function SameValue(const A, B: Single; Epsilon: Single): Boolean;

unit

System.Math

返回两个浮点值是否(近似)相等。

参数

AB 是要比较的值。

EpsilonAB 可以不同但仍被视为相同值的最大值。

如果 Epsilon = 0,则隐式使用一些合理的默认值。 例如,SameValue(const A, B: Double; Epsilon: Double) 版本使用默认值:Epsilon = Max(Min(Abs(A), Abs(B)) * 1E-12, 1E-12)

System.Math.CompareValue

function CompareValue(const A, B: Extended; Epsilon: Extended): TValueRelationship;
function CompareValue(const A, B: Double; Epsilon: Double): TValueRelationship;
function CompareValue(const A, B: Single; Epsilon: Single): TValueRelationship;
function CompareValue(const A, B: Integer): TValueRelationship;
function CompareValue(const A, B: Int64): TValueRelationship;
function CompareValue(const A, B: UInt64): TValueRelationship;

unit

System.Math

返回两个数值之间的关系。

比较浮点值时,允许指定在比较值时使用的最大差值,以便在该数值范围内时将它们视为相同。

参数

AB 是要比较的值。

EpsilonAB 可以不同但仍被视为相同值的最大值。

返回值

TValueRelationship 类型定义的以下常量之一:

  • LessThanValue 如果 A 小于 B (如果 AB 是浮点数,则大于 Epsilon)。
  • EqualsValue 如果 A 等于 B(如果 AB 是浮点数,则相同或在Epsilon内))。
  • GreaterThanValue 如果 A 大于 B(如果 AB 是浮点数,则大于 Epsilon)。

如果 Epsilon = 0,则隐式使用一些合理的默认值。 例如,CompareValue(const A, B: Double; Epsilon: Double) 版本使用默认值:Epsilon = Max(Min(Abs(A), Abs(B)) * 1E-12, 1E-12)

System.Math.IsZero

function IsZero(const A: Extended; Epsilon: Extended): Boolean;
function IsZero(const A: Double; Epsilon: Double): Boolean;
function IsZero(const A: Single; Epsilon: Single): Boolean;

unit

System.Math

返回浮点变量或表达式是否为零或非常接近零。

参数

测试A指定的值是否为零

使用IsZero,或者与零的差异不超过' Epsilon '。

使用IsZero来测试A指定的值是否为零,或者与零最多相差Epsilon。

如果 Epsilon = 0,则隐式使用一些合理的默认值。 例如,IsZero(const A: Double; Epsilon: Double) 版本使用默认值:Epsilon = 1E-12.

posted @ 2022-12-31 12:34  txgh  阅读(717)  评论(0编辑  收藏  举报