Неправильное форматирование с плавающей точкой в ​​PHP (sprintf, printf) - PullRequest
5 голосов
/ 14 марта 2011

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

1 Ответ

10 голосов
/ 14 марта 2011

Вы помещаете модификаторы типа формата после спецификатора типа формата, а не до.Попробуйте это:

printf('%.2F', $a)

Что касается нечетного вывода, возможно, что ваши настройки локализации делают это.Попробуйте выполнить строку ниже и посмотрите, что возвращается для вашего локального.

echo setlocale(LC_ALL, null);

Попробуйте изменить свой язык на другой, чтобы увидеть, исчезнет ли проблема.Вот так:

setlocale(LC_ALL, 'en_CA.UTF-8');
...