浮点类型比较,判断是否为零
代码
比较浮点数
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
返回两个浮点值是否(近似)相等。
参数
A 和 B 是要比较的值。
Epsilon 是 A 和 B 可以不同但仍被视为相同值的最大值。
如果
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
返回两个数值之间的关系。
比较浮点值时,允许指定在比较值时使用的最大差值,以便在该数值范围内时将它们视为相同。
参数
A 和 B 是要比较的值。
Epsilon 是 A 和 B 可以不同但仍被视为相同值的最大值。
返回值
TValueRelationship
类型定义的以下常量之一:
- LessThanValue 如果 A 小于 B (如果 A 和 B 是浮点数,则大于 Epsilon)。
- EqualsValue 如果 A 等于 B(如果 A 和 B 是浮点数,则相同或在Epsilon内))。
- GreaterThanValue 如果 A 大于 B(如果 A 和 B 是浮点数,则大于 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
返回浮点变量或表达式是否为零或非常接近零。
参数
测试A指定的值是否为零
使用IsZero,或者与零的差异不超过' Epsilon '。
使用IsZero来测试A指定的值是否为零,或者与零最多相差Epsilon。
标签:function,判断,const,Double,delphi,浮点,Add,Epsilon,IsZero From: https://www.cnblogs.com/txgh/p/17016457.html如果
Epsilon = 0
,则隐式使用一些合理的默认值。 例如,IsZero(const A: Double; Epsilon: Double)
版本使用默认值:Epsilon = 1E-12.