@hipekk - dlatego że liczby zmiennoprzeciskowe nie są aż tak dokładne żeby porównywać je przez standardowy operator porównania =
wymyślnono zestaw funkcji CompareValue znajdujących się w module Math, które porównują dwie wartości (nie tylko zmiennoprzecinkowe) na podstawie ustalonej, bardzo małej Delty
; Więc aby mieć możliwość porównania dwóch liczb zmiennoprzecinkowych z jakąś malutką dokładnością musisz skorzystać z tej funkcji;
Źródło funkcji CompareValue ze źródeł Lazarusa:
function CompareValue (const A, B: Extended; delta: Extended = 0.0): TValueRelationship;
begin
result:=GreaterThanValue;
if abs(a-b)<=delta then
result:=EqualsValue
else
if a<b then
result:=LessThanValue;
end;
Jak widać działa to na takiej zasadzie, jaką podał @_13th_Dragon, tyle że obudowane jest w funkcję i pozwala na podanie dowolnej Delty
w parametrze; Funkcja zwraca wartość typu TValueRelationship, który to zadeklarowany jest w module Math:
type
TValueRelationship = -1..1;
const
EqualsValue = 0;
LessThanValue = Low(TValueRelationship);
GreaterThanValue = High(TValueRelationship);
Tak więc polecam najpierw szukać informacji w sieci zanim założy się wątek na forum, a także zainteresowanie się źródłami modułów Lazarusa; Aby przejść do deklaracji stałej, typu, klasy, funkcji itd. wystarczy przytrzymać klawisz Ctrl
i kliknąć na nazwę tego elementu, a zostanie otwarty moduł z jego deklaracją (pod warunkiem, że moduł ten jest dodany do sekcji uses
w programie); A jeśli potrzeba przeglądnąć kod jakiejś metody, to tak samo Ctrl
+ LPM, z tym że kursor zostanie ustawiony na deklaracji metody w klasie i aby przejść do jej definicji należy wcisnąć kombinację Shift+Ctrl+Down
; Nie zawsze metody danej klasy są zadeklarowane w tym samym module, co klasa.