你还在装 發表於 2022-12-31 12:34:00

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

<h1 id="浮点类型比较判断是否为零">浮点类型比较,判断是否为零</h1>
<h2 id="代码">代码</h2>
<h3 id="比较浮点数">比较浮点数</h3>
<pre><code class="language-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) &lt; 0 then
    Memo1.Lines.Add('d1小于d2')
else if CompareValue(d1, d2) &gt; 0 then
    Memo1.Lines.Add('d1大于d2')
else
    Memo1.Lines.Add('d1等于d2');
end;
</code></pre>
<h3 id="判断是否为零">判断是否为零</h3>
<pre><code class="language-delphi">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;
</code></pre>
<h2 id="方法">方法</h2>
<h3 id="systemmathsamevalue">System.Math.SameValue</h3>
<pre><code class="language-delphi">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;
</code></pre>
<p><strong>unit</strong></p>
<p>System.Math</p>
<p>返回两个浮点值是否(近似)相等。</p>
<p><strong>参数</strong></p>
<p><em>A</em> 和 <em>B</em> 是要比较的值。</p>
<p><em>Epsilon</em> 是 <em>A</em> 和 <em>B</em> 可以不同但仍被视为相同值的最大值。</p>
<blockquote>
<p>如果 <code>Epsilon = 0</code>,则隐式使用一些合理的默认值。 例如,<code>SameValue(const A, B: Double; Epsilon: Double)</code> 版本使用默认值:<code>Epsilon = Max(Min(Abs(A), Abs(B)) * 1E-12, 1E-12) </code></p>
</blockquote>
<h3 id="systemmathcomparevalue">System.Math.CompareValue</h3>
<pre><code class="language-delphi">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;
</code></pre>
<p><strong>unit</strong></p>
<p>System.Math</p>
<p>返回两个数值之间的关系。</p>
<p>比较浮点值时,允许指定在比较值时使用的最大差值,以便在该数值范围内时将它们视为相同。</p>
<p><strong>参数</strong></p>
<p><em>A</em> 和 <em>B</em> 是要比较的值。</p>
<p><em>Epsilon</em> 是 <em>A</em> 和 <em>B</em> 可以不同但仍被视为相同值的最大值。</p>
<p><strong>返回值</strong></p>
<p><code>TValueRelationship</code> 类型定义的以下常量之一:</p>
<ul>
<li><em>LessThanValue</em> 如果 <em>A</em> 小于 <em>B</em> (如果 <em>A</em> 和 <em>B</em> 是浮点数,则大于 <em>Epsilon</em>)。</li>
<li><em>EqualsValue</em> 如果 <em>A</em> 等于 <em>B</em>(如果 <em>A</em> 和 <em>B</em> 是浮点数,则相同或在<em>Epsilon</em>内))。</li>
<li><em>GreaterThanValue</em> 如果 <em>A</em> 大于 <em>B</em>(如果 <em>A</em> 和 <em>B</em> 是浮点数,则大于 <em>Epsilon</em>)。</li>
</ul>
<blockquote>
<p>如果 <code>Epsilon = 0</code>,则隐式使用一些合理的默认值。 例如,<code>CompareValue(const A, B: Double; Epsilon: Double)</code> 版本使用默认值:<code>Epsilon = Max(Min(Abs(A), Abs(B)) * 1E-12, 1E-12)</code></p>
</blockquote>
<h3 id="systemmathiszero">System.Math.IsZero</h3>
<pre><code class="language-delphi">function IsZero(const A: Extended; Epsilon: Extended): Boolean;
function IsZero(const A: Double; Epsilon: Double): Boolean;
function IsZero(const A: Single; Epsilon: Single): Boolean;
</code></pre>
<p><strong>unit</strong></p>
<p>System.Math</p>
<p>返回浮点变量或表达式是否为零或非常接近零。</p>
<p><strong>参数</strong></p>
<p>测试<em>A</em>指定的值是否为零</p>
<p>使用<strong>IsZero</strong>,或者与零的差异不超过' Epsilon '。</p>
<p>使用IsZero来测试A指定的值是否为零,或者与零最多相差Epsilon。</p>
<blockquote>
<p>如果 <code>Epsilon = 0</code>,则隐式使用一些合理的默认值。 例如,<code>IsZero(const A: Double; Epsilon: Double)</code> 版本使用默认值:<code>Epsilon = 1E-12.</code></p>
</blockquote><br><br>
来源:https://www.cnblogs.com/txgh/p/17016457.html
頁: [1]
查看完整版本: delphi 浮点类型比较,判断是否为零