Надо смотреть не результат, а промежуточные данные
X++:
static void Test_Job(Args _args)
{
AmountCur a,b,c,d,e,f,t1,t2;
;
a = 13532.5;
b = 100 / 2827;
c = 2776851.86;
d = 2776851.86;
e = a / b;
f = (a / b) / c * d;
info("a / b = " + num2str(a / b,0,16,1,0));
info("(a / b) / c = " + num2str((a / b) / c,0,16,1,0));
info("(a / b) / c * d = " + num2str((a / b) / c * d,0,16,1,0));
info("round((a / b) / c * d, 0.01) = " + num2str(round((a / b) / c * d, 0.01),0,16,1,0));
}
Ни одна программа не может хранить бесконечные дроби. В любом случае, количество значащих цифр мантиссы будет ограничено некоторым фиксированным числом. Скорее всего, как и большинство продуктов Microsoft, действительные данные в памяти Axapta храняться с точностью до 16 значащих цифр (точнее, то 15,95). Как следствие, выражение вида
1/3 = 0,3333333333333333
Не может иметь "бесконечное" число 3, чтобы при последующем умножении на 3 получить
ровно единицу. Будет число чуть меньше единицы. На сколько "чуть" зависит от того, сколько значащих цифр хранится в данной программной оболочке
Ну, и кроме того, важными являются правила округления. Система Axapta, очевидно, использует "стандартные" правила округления
В приведенном изначально примере вопрос стоит об округлении числа
382563.7749999999000000
В данном контексте, фактически, с точностью до 2 знака после запятой. Очевидно, это будет число
382563.77
Все в соответствии с правилами округления.