Я отлаживал PHP-код и выяснял следующее:
$a = 111749392891; printf('%f', $a); 111749392890.:00000 printf('%F', $a); 111749392890.:00000 printf('%F.2', $a) 111749392890.:00000.2 printf('%F0.2', $a); 111749392890.:000000.2 number_format($a, 2, '.',''); 111749392891.00
Только вывод number_format () выглядит мне хорошо. Я что-то упускаю? Я использую PHP 5.3.
Вы помещаете модификаторы типа формата после спецификатора типа формата, а не раньше. Попробуй это:
printf('%.2F', $a)
Что касается нечетного вывода, возможно, что ваши настройки локализации делают это. Попробуйте запустить строку ниже и посмотреть, что возвращается для вашего локального.
echo setlocale(LC_ALL, null);
Попробуйте изменить свой язык на что-то другое, чтобы увидеть, не исчезла ли проблема. Вот так:
setlocale(LC_ALL, 'en_CA.UTF-8');