Pod kodem wstawiłem opis problemu.
function SumujRozliczenia: Currency; //Currency, Duble nie ma znaczenia
begin
Result := 7916.2;
edtWartosc.FloatValue := Result;
end;
procedure Porownanie;
var
E1,E2 : Extanded;
C1,C2 : Currency;
D1,D2 : Double;
begin
C2 := edtWartosc.FloatValue; //FloatValue jest typu Double
D2 := edtWartosc.FloatValue;
if SumujRozliczenia > edtWartosc.FloatValue then
sleep(1); //To się wykona
if SumujRozliczenia > Currency(edtWartosc.FloatValue) then
sleep(1); //To się wykona
if SumujRozliczenia > C2 then
sleep(1); //To się nie wykona
end;
To że double pokazuje np 7916.2 Wartość tak naprawdę może wynosić 7916.199 ... niby Currency ma to rozwiązać jeżeli dodajemy np wartości z dokładnością do 4 miejsc po przecinku.
I myślałem że ten przypadek ** if SumujRozliczenia > Currency(edtWartosc.FloatValue) then** zadziała ale nie delphi wykrywa różne wartości.
Chciałem Was zapytać jak sobie radzić z takim problemem czy za każdym razem gdy porównuje wartości typu Double mam używać funkcji z modułu Math SameValue , CompareValue np.
if CompareValue(SumujRozliczenia,edtWartosc.FloatValue,0.001) = GreaterThanValue then
sleep(1); //To się nie wykona