вообще, как известно, типы extended, double и, соответсвенно, алиас real и ему подобные не является ТОЧНЫМ типом, т.е. там значение может "чуть-чуть" отличаться от того, которое отображается при выводе (и, соответсвенно, от того, которое было помещено в переменную).
Решение данной проблемы обычно таково:
Вариант 1. Использовать типы с фиксированной точкой. Для твоих значений за глаза хватит типа Currency (4 знака после точки).
Вариант 2. Сравнивать не на равно, а на попадание в диапазон:
Код:
const
Epsln = 0.03; // для шага 0.1 достаточно.
var
A, B : Double;
begin
A := 0.3;
B := A + 0.00001; // при выводе %1.1f будет тоже 0.3
If A = B
Then ShowMessage(' = True')
Else ShowMessage(' = False');
If Abs(A-B) < Epsln
Then ShowMessage(' == True')
Else ShowMessage(' == False');
end;