Если я правильно понимаю вашу проблему, вам вообще не нужно использовать «goto». Вы можете решить эту проблему, используя простой цикл while, обернутый вокруг ваших циклов for.
while True:
for things in loop1:
do stuff
for things in loop2:
do more stuff
if there_are_no_more_pages:
break
Проблема имеет отношение как Currency
значения преобразовываются в Extended
значения во время выполнения по сравнению с тем, как литералы с плавающей точкой преобразовываются в Extended
значения во время компиляции. Если преобразование не является тем же в обоих случаях, то значения передали CheckEquals
может не выдержать сравнение равный.
Стоило бы зарегистрироваться в окне CPU отладчика, проходит ли любое из значений промежуточное звено Double
оцените продвигающийся Extended
при подготовке к вызову функции. Дополнительное преобразование влияло бы на точное значение результата.
Другая вещь рассмотреть состоит в том, что 16.65 не является представимым точно как Extended
значение, но это является представимым точно как a Currency
значение. Хотя Currency
классифицирован как тип с плавающей точкой, это - действительно масштабируемое 64-разрядное целое число фиксированной точки. Это - вероятно, основания для запроса дополнительного CheckEquals
перегрузка в DUnit, который принимает это во внимание.
Я вижу, что существует только CheckEquals () для расширенных значений в источниках Delphi 2007 dUnit. Но Вы могли использовать этого:
procedure CheckEquals(expected, actual: extended; delta: extended;
msg: string = ''); overload; virtual;
и дайте надлежащую дельту для значений валюты.