出處 : http://codingma.blogspot.tw/2012/06/delphi-if.html
function example(IntA, IntB, Check: Integer;): Boolean;
var
Rate: Double;
begin
Result := False;
Rate := IntA / IntB;
if Rate * 100 >= Check then
Result := True;
end;
上面這個例子 傳入 IntA := 980; IntB := 1000; Check := 98;
大家都知道傳入上面3個參數值後, 回傳值應該是 True 才對,
但詭異的事情就這麼發生了..
在電腦a 它確實回傳 True
可是在電腦b 怎麼樣都給我回傳 False
為了這個問題,我們花了3~4個小時在除錯
最後終於找到答案了,
沒錯,重點就是在 if 這個判斷式上面..
平常我們 if A >= B then 這樣都是ok的..
但今天這個判斷式大家有沒有注意到它有什麼不一樣..
對, Rate*100 這不是一個變數,而是一個運算式
在Delphi的世界裡, 這樣寫是可以判斷沒錯..
但請注意 Rate*100 所得到的值會先被暫存起來
而暫存這個值的型別,Delphi在這裡會使用Double這個型別.
也許你會說.就算是這樣..那也沒問題丫..
錯了!問題就出在這個型別,我們很天真的認為
980/1000 = 0.98
0.98 *100 = 98
但其實Double存的值是 97.99999982
我看到的是這個值,小數點後幾個9我是忘了..
但值確是是這樣...所以判斷式一判斷下去
if 97.99999982 >= 98 then 這樣當然不成立
這個問題花費了我們不少時間,在這裡貼出來..
希望不在再有人掉入這個陷阱裡囉~^_^~