Почему PHP-функция money_format () не форматирует числа? - PullRequest
0 голосов
/ 08 мая 2018

Я хочу отформатировать числа в соответствии с желаемой настройкой локали. Итак, я использую пример кода из руководства по PHP:

$number = 1234.56;

// let's print the international format for the en_US locale
setlocale(LC_MONETARY, 'en_US');
echo money_format('%i', $number) . "\n";
// USD 1,234.56

Вместо ожидаемого результата я просто получаю неформатированное значение "1234,56". То же самое происходит, если я использую другую локаль, например 'it_IT' вместо 'en_US'.

Почему нет, если формат?

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

В руководстве по PHP сказано, что функция money_format( string $format , float $number ) основана на функции strfmon() C.

Возможные параметры, которые вы можете передать в качестве аргумента $format, - это те, которые может понять команда locale вашей операционной системы. Если вы передаете что-то другое, то число вообще не форматируется, оно просто конвертируется в строку. Это то, что случилось со мной.

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

locale -a 

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

apt-get install locales
apt-get install locales-all

После установки всех локалей команда locale -a перечисляет сотни локалей. Теперь функция number_format() работает так, как вы ожидали.

0 голосов
/ 08 мая 2018

Ибо в ваших envs нет en_US местных жителей.Используйте locale -a для проверки.

Вы должны установить его.Обратитесь к этому ответу

...