Недавно мы начали процесс создания 64-битных сборников наших приложений. Во время тестирования сравнения мы обнаружили, что 64-битная сборка вычисляется по-разному. У меня есть образец кода, который демонстрирует разницу между двумя сборками.
var
currPercent, currGross, currCalcValue : Currency;
begin
currGross := 1182.42;
currPercent := 1.45;
currCalcValue := (currGross * (currPercent * StrToCurr('.01')));
ShowMessage(CurrToStr(currCalcValue));
end;
Если вы выполните это в 32-битной версии, currCalcValue вычисляется с 17.1451, а 64-разрядная версия возвращается с 17.145.
Почему не 64-битная сборка, вычисляющая дополнительное десятичное место? Все переменные определяются как 4 значения десятичной суммы.