По поводу решения пользователя @etki:
Данное решение не работает с экспоненциальными числами. Иначе говоря, если вы указываете в качестве вводного значения результат вычисления дробных чисел:
$number = '0.16831356174533' - '0.16832176570967'; // 8.2039643400089E-6
$precision = 8;
$pos = strrpos($number, '.');
if($pos !== false) $number = substr($number, 0, $pos + 1 + $precision);
var_dump($number); // string(11) "-8.20396434"
То в функцию substr передастся экспоненциальное значение: 8.2039643400089E-6, и обрезаться будет уже оно. Иначе говоря, решение не работает, и с малыми дробными значениями может выдасть совсем не желаемый результат. Прокоментировать ответ не мог, так как не позволяла репутация, поэтому указал новым ответом.
Возможное решение
Используйте функцию bcdiv, она как раз-таки не округляет, а обрезает дробное число, однако у нее та же проблема - она не может работать с экспоненциальными числами, но, по крайней мере, она работает с остальными дробными значениями:
$number = '0.16839';
var_dump(number_format($number, 4)); // string(6) "0.1684"
var_dump(bcdiv($number, 1, 4)); string(6) "0.1683"