Проблема в переполнении. Действительные значения переполняют целочисленный тип.
Функция сравнения предназначена для возврата отрицательного значения, чтобы указать меньше, чем положительное. Укажите больше и ноль, чтобы указать равный. Использование вами арифметики - причина вашей проблемы, которая приводит к переполнению. Вместо этого используйте операторы сравнения.
function(const Rec1, Rec2: RCInd): Integer
begin
if Rec1.Total < Rec2.Total then
Result := 1
else if Rec1.Total > Rec2.Total then
Result := -1
else
Result := 0;
end;
Проблема в этом вопросе заключается в попытке вписать действительное значение в целое число, но даже если у вас есть целочисленные данные, тогда арифметику не следует использовать для функций сравнения. Рассмотрим выражение
Low(Integer) - 1
Это приводит к переполнению. Как правило, всегда используйте операторы сравнения для реализации функций сравнения.