Тип валюты в Delphi - это 64-разрядное целое число, масштабированное на 1/10 000; другими словами, его наименьшее приращение эквивалентно 0,0001. Он не подвержен ошибкам точности так же, как код с плавающей запятой.
Однако, если вы умножаете свои числа Валюты на типы с плавающей запятой или делите значения Валюты, округление необходимо выполнить тем или иным способом. FPU управляет этим механизмом (это называется «управляющим словом»). Модуль Math содержит некоторые процедуры, которые управляют этим механизмом, в частности SetRoundMode. Вы можете увидеть эффекты в этой программе:
{$APPTYPE CONSOLE}
uses Math;
var
x: Currency;
y: Currency;
begin
SetRoundMode(rmTruncate);
x := 1;
x := x / 6;
SetRoundMode(rmNearest);
y := 1;
y := y / 6;
Writeln(x = y); // false
Writeln(x - y); // 0.0001; i.e. 0.1666 vs 0.1667
end.
Возможно, используемая вами сторонняя библиотека устанавливает для управляющего слова другое значение. Возможно, вы захотите установить контрольное слово (то есть режим округления) явно в начальной точке ваших важных вычислений.
Кроме того, если ваши расчеты когда-либо переводятся в обычную плавающую точку, а затем обратно в валюту, все ставки отклонены - слишком сложно для аудита. Убедитесь, что все ваши расчеты в валюте.