Неверное форматирование float в PHP (sprintf, printf)

Я отлаживал 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');