用Math的CompareValue比較大小出現的不解狀況,希望知道情況的大牛指導下.
除錯代碼如下:
procedure TForm1.btn1Click(Sender: TObject);
var
vD, vE: Extended;
a, b, c, d: Double;
begin
a := 100.99;
b := 50;
c := 10;
d := 30.99;
vD := Abs(a - b - c - d);
vE := 10;
if CompareValue(vD, vE) <> -1 then
ShowMessage('11');
end;
這里CompareValue(vD, vE) 的比較結果,我認為應該是0(相等回傳值為0).結果回傳值是-1
comparevalue(vD, 10)的比較結果也是-1,我覺得不應該是引數型別不一致導致的。
如果是CompareValue(vE,10) 比較,結果是0.將abs的回傳值vD設成Double型別,
CompareValue(vD,10)的結果是0,也是正常的。
請問,為什么求絕對值后的Extended比較會出問題?
uj5u.com熱心網友回復:
varvD, vE,
a, b, c, d: Double;
Res:Boolean;
begin
a := 100.99;
b := 50;
c := 10;
d := 30.99;
vD := a - b - c - d;
vE := d - 20.99;
Res:=SameValue(vD, vE);
if Res then
ShowMessage('11');
原來的代碼中,vD為double,vE為Integer,應該是型別不符
這只是個人的意見
代碼改為上面的,當d參與運算,就能得出True
CompareValue其實也是呼叫SameValue
總的來說,要比較兩個數值是不是一致,這兩個數值都應該參與運算后,再比較
uj5u.com熱心網友回復:
function CompareValue(const A, B: Integer): TValueRelationship; overload;function CompareValue(const A, B: Int64): TValueRelationship; overload;
function CompareValue(const A, B: Single; Epsilon: Single = 0): TValueRelationship; overload;
function CompareValue(const A, B: Double; Epsilon: Double = 0): TValueRelationship; overload;
function CompareValue(const A, B: Extended; Epsilon: Extended = 0): TValueRelationship; overload;
比較A、B兩個變數的關系。如果A<B,則回傳值為-1;如果A=B,則回傳值為0;如果A>B,則回傳值為1;其中A、B只能為Integer、Int64、Single、Double、Extended運算式。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/74528.html
上一篇:急急急~~~ 會用fastreport控制元件的朋友麻煩進來幫個忙
下一篇:UDP指令是啥
