Директива #5,2
Posted in: Форматирование строк, By: admin, At: Сентябрь 15th, 2008
Вы можете модифицировать вывод mone у_ for mat () для более полного соответствия вашим потребностям. Например, вы можете использовать необязательные флаги для изменения минимальной длины результата:
<7php
setlocale (LC_MONETARY, ‘enJJS’);
echo money_format (1%=030#5.2i1, 1000);
?>
Директива #5,2 в спецификаторе формата указывает, что результирующая строка должна иметь не менее 5 целых и 2 дробных десятичных разряда. Часть =0 означает, что минимальная длина целой/дробной части должна достигаться заполнением недостающих позиций нулями. Фактически вы можете использовать любой символ — например, звездочка (*) часто применяется при печати чеков. И, наконец, последняя часть 30 используется для того, чтобы задать, что поле должно быть, по меньшей мере, 30 символов длиной. В результате получается следующий вывод:
USD 01,000.00
Как видите, символ разделения групп (запятая) не входит в общее число разрядов, указанное флагами.
Возможности money_format () не ограничиваются этим. Вы также можете использовать флаг ! для подавления вывода идентификатора валюты и флаг А для предотвращения использования разделителей групп. Это означает, что вы можете использовать money format () как замену number_format() несмотря на то, что она не имеет такой гибкости, как последняя.
Если вы удивляетесь, зачем вообще заботиться обо всем этом, вспомните, что для того, чтобы изменить способ форматирования number_f ormat () для использования региональных стандартов по вашему выбору, необходимо изменить значение локального параметра LC_NUMBERIC, что затронет числовой ввод, поступаемый извне (включая базы данных). То есть, например, если ваша база данных работает в региональном стандарте, отличном от того, что должен использоваться при отображении результата пользователю (как это и нужно большинству в распределенной среде), вы постоянно должны вызывать setlocale () перед тем, как выполнить number^format () для обеспечения того, чтобы данные, которые вы читаете и пишете в базу данных, были сформатированы корректно.
С другой стороны, если вы используете currency_f ormat () для печати числовых значений, вам понадобтггся только единожды изменить региональную установку LC_MONETARY и оставить ее неизменной до конца сценария.
И, наконец, следует отметить, что параметр $f ormat функции money_format () также может содержать текст, расширяемый до действительной спецификации формата вывода функции. Дополнительный текст будет возвращен функцией “как есть” (но не забудьте отменить каждый символ процента, используя %%). Ниже показан пример.
setlocale (LC_MONETARY, 1en_US’);
echo money_format (’Общая сумма %n, оплачено 50%% после подписи контракта’ . ‘ и 50%% по завершении проекта’, 1000);
?>Этот сценарий выведет следующую строку:
Общая сумма $1,000.00, оплачено 50% после подписи контракта и 50% по завершении проекта.
Leave a Reply