Вы помещаете модификаторы типа формата после спецификатора типа формата, а не до.Попробуйте это:
printf('%.2F', $a)
Что касается нечетного вывода, возможно, что ваши настройки локализации делают это.Попробуйте выполнить строку ниже и посмотрите, что возвращается для вашего локального.
echo setlocale(LC_ALL, null);
Попробуйте изменить свой язык на другой, чтобы увидеть, исчезнет ли проблема.Вот так:
setlocale(LC_ALL, 'en_CA.UTF-8');