Причина, по которой вы видите этот результат, заключается в том, что вы сначала выполняете деление.
Деление дает вам:
422218/2388865
0.17674418604651162790697674418604651163
, но вы запрашиваете 20 цифр, так что становится 0.1767441860465116279
.В этом свете bc теперь дает правильный результат:
0.1767441860465116279*473
83.5999999999999999967
A «решение» в этом случае будет сначала выполнить умножение (которое дает «всего» 9 цифр) а затем деление:
bcscale(20);
echo bcdiv(bcmul('422218','473'),'2388865');
83.60000000000000000000