Я бы сказал, что вы столкнулись с проблемой «округления банковского счета» и отправили неверные данные :-) Delphi RoundTo реализует округление банковского счета: нечетные числа, заканчивающиеся на .5, округляются в большую сторону, это традиционное поведение, но ..Четные числа, оканчивающиеся на .5, округляются вниз!Таким образом, 1,5 округляется до 2,0, а 2,5 округляется до 2,0 (ссылка на ссылку RoundTo )
Вторая возможность: http://www.merlyn.demon.co.uk/pas-chop.htm#DRT В некоторых версиях есть ошибкаDelphi.У вас одна и та же версия Delphi на всех машинах?
Третья возможность: вы говорите о числах с плавающей запятой!Они не являются точными числами!Сложение и вычитание их создает микромир десятичных знаков, обычно невидимых 0.1 + 0.2! = 0.3 !!Возможно, что вы видите как .5 не совсем .5, но .49999999 или .500000001.Если вы хотите проверить это, войдите в отладчик и проверьте, является ли c = 3675.05
(логическое выражение) истинным или ложным, если round(c, -1) = 3675.1
истинным или ложным, и так далее.Если вы хотите исследовать мир fp, попробуйте следующее: http://pages.cs.wisc.edu/~rkennedy/exact-float
Четвертая возможность: округление 3675.05 изменяется, если вы используете Single или Double.Для Single это 3675,1, для Double - 3675 :-) Ах ... волшебный мир поплавков: -)
Если вы хотите делать математические трюки, используйте тип Currency (это число с фиксированной точкой)и не имеет этих проблем).
Существует последняя возможность, но она совершенно невероятна: процессор Intel сохраняет промежуточные результаты операций Double как 80 бит fp, а затем "округляет" их до 64 бит на выходе,Некоторые компиляторы / языки вводят дополнительную оптимизацию (которая активируется при запуске программы, если это возможно), чтобы использовать коды операций SSE2, присутствующие в некоторых процессорах, вместо FPU процессора.SSE2 работает на 64-битной частоте кадров, поэтому не нужно повышать до 80 бит и понижать с 80 бит.Это может привести к тому, что вы видите.Прочитайте здесь Различия между x87 FPU и SSE2 .