Сравнение проблем в DUnit CheckEquals со Значениями полей Валюты

Если я правильно понимаю вашу проблему, вам вообще не нужно использовать «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
7
задан Fabio Gomes 28 January 2009 в 18:27
поделиться

2 ответа

Проблема имеет отношение как Currency значения преобразовываются в Extended значения во время выполнения по сравнению с тем, как литералы с плавающей точкой преобразовываются в Extended значения во время компиляции. Если преобразование не является тем же в обоих случаях, то значения передали CheckEquals может не выдержать сравнение равный.

Стоило бы зарегистрироваться в окне CPU отладчика, проходит ли любое из значений промежуточное звено Double оцените продвигающийся Extended при подготовке к вызову функции. Дополнительное преобразование влияло бы на точное значение результата.

Другая вещь рассмотреть состоит в том, что 16.65 не является представимым точно как Extended значение, но это является представимым точно как a Currency значение. Хотя Currency классифицирован как тип с плавающей точкой, это - действительно масштабируемое 64-разрядное целое число фиксированной точки. Это - вероятно, основания для запроса дополнительного CheckEquals перегрузка в DUnit, который принимает это во внимание.

5
ответ дан 7 December 2019 в 10:09
поделиться

Я вижу, что существует только CheckEquals () для расширенных значений в источниках Delphi 2007 dUnit. Но Вы могли использовать этого:

procedure CheckEquals(expected, actual: extended; delta: extended;
  msg: string = ''); overload; virtual;

и дайте надлежащую дельту для значений валюты.

1
ответ дан 7 December 2019 в 10:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: