php sprintf ведущие нули

sprintf — Возвращает отформатированную строку

Описание

Список параметров

Переменные будут преобразованы в соответвующий тип для спецификатора:

Обработка типов

ТипСпецификатор
strings
integerd, u, c, o, x, X, b
doubleg, G, e, E, f, F

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

В строке формата поддерживается нумерация и изменение порядка параметров. Например:

Пример #1 Изменение порядка параметров

= 5 ;
$location = ‘дереве’ ;

Пример #2 Изменение порядка параметров

Пример #3 Изменение порядка параметров

Пример #4 Изменение порядка параметров

Пример #5 Указание дополняющего символа

Результат выполнения данного примера:

Пример #6 Использование описателя позиции и совместно с другими описателями

Результат выполнения данного примера:

The c type specifier ignores padding and width

Возвращаемые значения

Примеры

Пример #7 sprintf() : заполнение нулями

Результат выполнения данного примера:

Пример #8 printf() : описатели строк

= ‘monkey’ ;
$t = ‘many monkeys’ ;

Результат выполнения данного примера:

Пример #9 sprintf() : целые числа, дополненные нулями

Пример #10 sprintf() : форматирование денежных величин

Пример #11 sprintf() : научная нотация

Смотрите также

Источник

sprintf

(PHP 4, PHP 5, PHP 7, PHP 8)

sprintf — Возвращает отформатированную строку

Описание

Список параметров

Строка формата состоит из нуля или более директив: обычные символы (за исключением % ), которые просто выводятся без изменения и спецификаторы преобразования, каждый из которых требует передачи своего параметра.

Argnum

Флаги

ФлагОписание
Выравнивание по левому краю в пределах заданной ширины поля; По умолчанию выравнивание происходит по правому краю.
+Печатает плюс + у не отрицательных чисел; По умолчанию знак печатается только у отрицательных чисел.
(space)Дополняет результат пробелами. Это поведение по умолчанию.
0Дополняет числа нулями (только слева). Со спецификатором s также может дополнять нулями справа.
‘ (char)Дополняет результат символом (char).
Ширина

Целое число, определяющее минимальное количество символов, которое будет напечатано.

Точность

Замечание: Если указана точка без последующего значения точности, то точность будет считаться за 0.

Замечание: Попытка использовать спецификатор позиции со значением больше, чем PHP_INT_MAX приведёт к выводу предупреждения.

Если P > X ≥ −4, преобразование будет в стиле «f» и точность будет P − (X + 1). В обратном случае, преобразование будет в стиле «e» и точность будет P − 1.

Спецификатор c игнорирует значения ширины и дополнения

Попытка использовать спецификаторы с указанием ширины для строки в многобайтовой кодировке может привести к неожиданным результатам.

Возвращаемые значения

Список изменений

ВерсияОписание
8.0.0Функция больше не возвращает false в случае возникновения ошибки.

Примеры

Пример #1 Argument swapping

Строка формата поддерживает нумерацию и перемешивание аргументов.

Результат выполнения данного примера:

Теперь представим, что строка форматирования задаётся в стороннем файле. Это обычная практика при необходимости поддержки нескольких языков. Представим, что строка была переписана таким образом:

Дополнительным приятным моментом является то, что мы можем использовать один параметр для нескольких подстановок.

При использовании нумерованных аргументов, спецификатор позиции n$ должен стоять сразу же за символом процента ( % ), до любого другого спецификатора, как показано ниже.

Пример #2 Использование символа заполнения

Результат выполнения данного примера:

Пример #3 Спецификатор позиции в комбинации с другими спецификаторами

Результат выполнения данного примера:

Пример #4 sprintf() : целое с лидирующими нулями

Пример #5 sprintf() : форматирование денежных единиц

Результат выполнения данного примера:

Пример #6 sprintf() : научная нотация

Результат выполнения данного примера:

Смотрите также

User Contributed Notes 36 notes

With printf() and sprintf() functions, escape character is not backslash ‘\’ but rather ‘%’.

1. A plus sign (‘+’) means put a ‘+’ before positive numbers while a minus sign (‘-‘) means left justify. The documentation incorrectly states that they are interchangeable. They produce unique results that can be combined:

2. Padding with a ‘0’ is different than padding with other characters. Zeros will only be added at the front of a number, after any sign. Other characters will be added before the sign, or after the number:

There are already some comments on using sprintf to force leading leading zeros but the examples only include integers. I needed leading zeros on floating point numbers and was surprised that it didn’t work as expected.

This threw me a little off. To get the desired result, one needs to add the precision (2) and the length of the decimal seperator «.» (1). So the correct pattern would be

Please see http://stackoverflow.com/a/28739819/413531 for a more detailed explanation.

Here is how to print a floating point number with 16 significant digits regardless of magnitude:

$format = ‘There are %1$d monkeys in the %s and %s ‘;
printf($format, 100, ‘Chennai’, ‘Bangalore’);

Expecting to output
«There are 100 monkeys in the Chennai and bangalore»

But, this will output
«There are 100 monkeys in the 100 and Chennai»

Because, the second and Third specifiers takes 1rst and 2nd arguments. Because it is not assigned with any arguments.

Using argument swapping in sprintf() with gettext: Let’s say you’ve written the following script:

#: file.php:9
#, ycp-format
msgid «The %2\\$s contains %1\\$d monkeys»
msgstr «»

Notice how an extra backslash has been added by xgettext.

Once you’ve translated the string, you must remove all backslashes from the ID string as well as the translation, so the po file will look like this:

#: file.php:9
#, ycp-format
msgid «The %2$s contains %1$d monkeys»
msgstr «Der er %1$d aber i %2$s»

If you use the default padding specifier (a space) and then print it to HTML, you will notice that HTML does not display the multiple spaces correctly. This is because any sequence of white-space is treated as a single space.

To overcome this, I wrote a simple function that replaces all the spaces in the string returned by sprintf() with the character entity reference » » to achieve non-breaking space in strings returned by sprintf()

The old «monkey» example which helped me a lot has sadly disappeared.

I’ll Re-post it in comment as a memory.

/*
%b = ‘10100111101010011010101101’
%c = ‘A’
%d = ‘43951789’
%e = ‘4.395179e+7’
%u = ‘43951789’
%u = ‘18446744073665599827’
%f = ‘43951789.000000’
%o = ‘247523255’
%s = ‘43951789’
%x = ’29ea6ad’
%X = ’29EA6AD’
%+d = ‘+43951789’
%+d = ‘-43951789’
*/

$s = ‘monkey’ ;
$t = ‘many monkeys’ ;

Note that when using the argument swapping, you MUST number every argument, otherwise sprintf gets confused. This only happens if you use number arguments first, then switch to a non-numbered, and then back to a numbered one.

I had a nightmare trying to find the two’s complement of a 32 bit number.

This worked magic for me. previously I was trying to use

Hope this helps someone fighting with two’s complement in PHP.

A more complete and working version of mb_sprintf and mb_vsprintf. It should work with any «ASCII preserving» encoding such as UTF-8 and all the ISO-8859 charsets. It handles sign, padding, alignment, width and precision. Argument swapping is not handled.

$newformat = «» ; // build a new format in UTF-8
$newargv = array(); // unhandled args in unchanged encoding

If you use argument numbering, then format specifications with the same number get the same argument; this can save repeating the argument in the function call.

Just wanted to add that to get the remaining text from the string, you need to add the following as a variable in your scanf

Here’s a clean, working version of functions to allow using named arguments instead of numeric ones. ex: instead of sprintf(‘%1$s’, ‘Joe’);, we can use sprintf(‘%name$s’, array(‘name’ => ‘Joe’));. I’ve provided 2 different versions: the first uses the php-like syntax (ex: %name$s), while the second uses the python syntax (ex: %(name)s).

Источник

Php sprintf ведущие нули

Описание string sprintf ( string format [, mixed args] )

Каждый описатель прреобразований состоит из знака процента ( % ), за которым следует один или более дополнительных элементов (в том порядке, в котором они здесь перечислены):

Начиная с PHP 4.0.6 в строке формата поддерживается нумерация и изменение порядка параметров. Например:

Пример 1. Изменение порядка параметров

Этот код выведет «There are 5 monkeys in the tree». Теперь представьте, что строка формата содержится в отдельном файле, который потом будет переведен на другой язык, и мы переписываем ее в таком виде:

Пример 2. Изменение порядка параметров

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

Пример 3. Изменение порядка параметров

Нумерация аргументов имеет еще одно применение: она позволят вывести один и тот же аргумент несколько раз без передачи функции дополнительных параметров.

Пример 4. Изменение порядка параметров

Примеры

Пример 5. sprintf() : заполнение нулями

Пример 6. sprintf() : форматирование денежных величин

Источник

Форматирование числа с ведущими нулями в PHP

Есть ли для этого функция PHP?

12 ответов

Я хотел бы использовать регулярное выражение для сопоставления числа с определенной длиной и ведущими нулями. Например с длиной числа 6: 000123 //Match 002535 //Match 2654 //No match 000021 //Match Какое регулярное выражение я могу использовать для этого?

В качестве альтернативы вы также можете использовать str_pad :

Чтобы повторить это:

Чтобы получить его:

Это должно сработать

Когда мне нужен 01 вместо 1, для меня сработало следующее:

EDIT ( каким-то образом запрошенный downvotes ), со страницы, связанной выше, вот пример «целых чисел с нулевым заполнением»:

Я не уверен, как интерпретировать комментарий, говорящий «It will never be more than 8 digits», и относится ли он к входу или выходу. Если он ссылается на вывод, вам потребуется дополнительный вызов substr(), чтобы обрезать строку.

Чтобы обрезать первые 8 цифр

Чтобы обрезать последние 8 цифр

Если входные номера всегда содержат 7 или 8 цифр, вы также можете использовать

Я получаю длинный XML от бэкенда. Для дальнейшего использования xml я преобразую его в объект JSON, используя одну из стандартных библиотек XMLtoJSON javascript. Проблема в том, что некоторые значения XML содержат число с ведущими нулями, например: 001072. Проблема в том, что когда библиотека.

Это кажется простым вопросом, но я нигде не могу найти ответа. Если у меня есть целочисленная переменная, как я могу преобразовать ее в строку с ведущими нулями? Я хочу что-то вроде кода ниже: n = 4 string_size = 3 println(fleading(n, string_size)) # result should be 004 Где fleading будет чем-то.

Я написал эту простую функцию для создания этого формата: 01:00:03

Секунды всегда отображаются (даже если они равны нулю). Минуты отображаются, если они больше нуля, или если требуются часы или дни. Часы отображаются, если они больше нуля или если требуются дни. Дни отображаются, если они больше нуля.

Это прекрасно работает:

Вы всегда можете злоупотреблять жонглированием типами:

Похожие вопросы:

Мое требование состоит в том, что я должен пройти 4 или более digits и провалить rest. regex, который я использовал, это: var test = new RegExp(/3<4,100>$/); Однако числа с ведущими нулями.

Я хочу отформатировать число с десятичной точкой в нем с ведущими нулями. Этот >>> ‘3.3’.zfill(5) 003.3 учитывает все цифры и даже десятичную точку. Есть ли функция в python, которая.

Я хотел бы форматировать свои числа с ведущими нулями, когда это необходимо: Пример: 1 >> 01 5 >> 05 10 >> 10 Я уже пробовал это сделать:

Я хотел бы использовать регулярное выражение для сопоставления числа с определенной длиной и ведущими нулями. Например с длиной числа 6: 000123 //Match 002535 //Match 2654 //No match 000021 //Match.

Есть ли способ превратить базовое десятичное число с ведущими нулями в строку в javascript? Похоже, что javascript просто не имеет понятия базового десятичного числа с ведущими нулями. Пример того.

Я получаю длинный XML от бэкенда. Для дальнейшего использования xml я преобразую его в объект JSON, используя одну из стандартных библиотек XMLtoJSON javascript. Проблема в том, что некоторые.

Это кажется простым вопросом, но я нигде не могу найти ответа. Если у меня есть целочисленная переменная, как я могу преобразовать ее в строку с ведущими нулями? Я хочу что-то вроде кода ниже: n = 4.

1.9.3-p551 :016 > 00232.to_i => 154 1.9.3-p551 :017 > 0023.to_i => 19 1.9.3-p551 :024 > 23.to_i => 23 преобразование числа с ведущими нулями в целочисленный тип дает нежелательные.

все! Мне нужно интерпретировать числа, заданные с ведущими нулями в python, как decimal. ( на входе есть числа, а не строки!) Используется Python2, в python3 такой проблемы больше нет. Я понятия не.

Мне нужно извлечь числа с ведущими нулями из смешанных ячеек? Пример содержимого ячейки A1: A1: 0012 SomeText Мне нужны в ячейке B1 только числа с ведущими нулями: B1: 0012 Если я помещу формулу.

Источник

Зачем использовать функцию sprintf в PHP?

Я пытаюсь узнать больше о функции PHP sprintf (), но php.net не помог мне, так как я все еще смущен, почему вы хотите его использовать?

Взгляните на мой пример ниже.

Зачем использовать это:

Когда это делает то же самое и легче писать IMO:

sprintf имеет все возможности форматирования исходного printf, что означает, что вы можете сделать гораздо больше, чем просто вставлять значения переменных в строки.

Например, укажите формат номера (шестнадцатеричный, десятичный, восьмеричный), количество десятичных знаков, отступы и многое другое. Google для printf, и вы найдете множество примеров. Статья в wikipedia на printf должна начать вас.

Существует много вариантов использования sprintf, но один из способов, которыми я их использую, – это сохранить такую ​​строку: «Hello, My Name is% s» в базе данных или как константа в классе PHP. Таким образом, когда я хочу использовать эту строку, я могу просто сделать это:

По сути, это позволяет некоторое разделение кода. Если я использую «Hello, My Name is% s» во многих местах моего кода, я могу изменить его на «% s – это мое имя» в одном месте и он обновляется повсеместно автоматически, без необходимости обращаться к каждому экземпляру и перемещаться конкатенации.

Другое использование sprintf в локализованных приложениях, поскольку аргументы sprintf не должны быть в том порядке, в котором они отображаются в строке формата.

Но такой язык, как французский, заказывает слова по-разному:

(Да, мой французский отстой: я изучил немецкий язык в школе!)

На самом деле, вы должны использовать gettext для хранения локализованных строк, но вы получите эту идею.

Это легче перевести.

Строки перевода (gettext) теперь:

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

Теперь, если у вас есть

Строки перевода (gettext) теперь:

Это имеет гораздо больший смысл, и гораздо более гибко переводить на другие языки

Лучшая причина, по которой я нашел, заключается в том, что она позволяет размещать все языковые строки в вашем языковом файле, если люди могут переводить и заказывать их по мере необходимости, – но вы все равно знаете, что независимо от формата, в котором находится строка, вы хотите показать имя пользователя.

Например, ваш сайт скажет «С возвращением [[Пользователь]]» в верхней части страницы. Как программист вы не знаете или не заботитесь о том, как ребята из UI собираются написать это – вы просто знаете, что имя пользователя будет показано где-то в сообщении.

Таким образом, вы можете вставлять сообщение в свой код, не беспокоясь о том, что это сообщение на самом деле.

Затем вы можете поддерживать любой тип сообщения на любом языке, используя это в своем фактическом php-коде.

Как уже упоминалось, он позволяет форматировать входные данные. Например, форсирование 2dp, 4-значных чисел и т. Д. Это очень полезно для построения строк запросов MySQL.

Другим преимуществом является то, что он позволяет отделить макет строки от данных, подаваемых в нее, почти как питание в параметрах. Например, в случае запроса MySQL:

Разумеется, этот метод имеет другие применения, например, при печати вывода в формате HTML и т. Д.

зачем вы хотите его использовать?

Это очень полезно при использовании (внешнего) источника для языковых строк. Если вам нужно фиксированное количество переменных в данной многоязычной строке, вам нужно знать только правильный порядок:

EN.txt

hu.txt

Вставные переменные даже не должны быть в начале или в конце на нескольких языках, но только их порядок.

Конечно, вы могли бы написать свою собственную функцию для выполнения этой замены, несомненно, даже с небольшим увеличением производительности, но это намного быстрее, просто (если у вас есть класс Language для чтения языковых строк) :

Использование sprintf () намного чище и безопаснее форматировать вашу строку.

Это также помогает работать с float, вы можете явно указать точность цифр (например, %.2f ), которая избавит вас от использования функций преобразования.

Таким образом, это хорошая практика для использования, чтобы иметь более чистый и читаемый код.

Например, см. Приведенный ниже пример :

Или какой-то простой пример, который печатает, например, ‘1’,’2′,’3′,’4′ :

и печать с форматированной строкой:

Даже я, хотя то же самое, если только не использовал его в последнее время. Когда вы создаете документы на основе пользовательских входов, это будет удобно.

Который может быть легко написан как

Некоторые из типичных случаев – это то, где вам нужен более точный контроль над выходным форматом. Это может быть сложно, например, удостовериться, что определенное значение имеет определенное количество пробелов, проложенных спереди, в зависимости от его длины или число, выводимое в определенном точном формате.

В руководстве по PHP есть много примеров

Также, что приходит на ваш пример «проще писать». Хотя эхо может быть проще писать, sprintf легче читать, особенно если у вас много переменных.

Другой причиной использования sprintf или printf может быть то, что вы хотите, чтобы пользователь определял выходной формат некоторого значения – вы можете смело разрешить им определять формат вывода, совместимый с sprintf.

О, и ваш пример на самом деле ошибочен для одной части. sprintf возвращает строку, но echo does not – echo немедленно выводит ее и ничего не возвращает, а sprintf просто возвращает ее.

Если вы использовали C / C ++, то вы бы использовали функцию sprintf.

Существует хорошая вероятность того, что вторая линия менее эффективна. Echo сконструирован как команда вывода, тогда как sprintf предназначен для замещения токенов. Я не человек PHP, но я подозреваю, что с эхом есть больше объектов. Если он действует как Java, он создает новую строку каждый раз, когда что-то добавляется в список, поэтому вы должны создать 4 строки.

Обычно я использую sprintf для обеспечения того, что идентификатор, который поступает с пользовательского ввода, является целым числом, например:

Также используется для выполнения рудиментарных шаблонов (для html-писем или других вещей), поэтому вы можете повторно использовать шаблон во многих местах:

Очень полезно также форматировать числа в разных представлениях (восьмеричные, управлять десятичной точкой и т. Д.).

Также можно написать:

По-моему, это яснее читать, но я вижу использование для локализации или форматирования.

sprintf особенно полезен при форматировании строк, которые используют числа. Например,

Апельсины отформатированы как целое число (-2), но будут округлены до положительных чисел, если вы используете% u для значений без знака. Чтобы избежать такого поведения, я использую абсолютную функцию abs () для округления числа до нуля следующим образом:

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

Левая часть оператора sprintf четко выражает строку и типы ожидаемых значений, а правая сторона четко выражает используемые переменные и как их манипулируют.

Иногда у меня есть что-то вроде этого, что я считаю более легким для чтения:

Аргумент тот же, что и для использования шаблонов. Вы захотите отделить свой Textsleev от фактических значений переменных. Помимо дополнительных полномочий sprintf, о которых мы упоминали, это просто стиль.

Действительно хороший пример использования sprintf выводит заполненные форматы чисел, а также при смешивании разных типов в строке. Его во многих случаях легче читать и делает его очень простым для печати различных представлений одной и той же переменной, особенно числовых.

Ну, sprintf имеет много возможностей, поскольку мы знаем пример, как показано ниже:

Функция sprintf () очень полезна, если мы знаем, как ее использовать.

Использование функции sprintf () над обычной конкатенацией имеет то преимущество, что вы можете применять различные типы форматирования для конкатенированных переменных.

В вашем случае у вас есть

Используя обычную конкатенацию, вы можете получить только результат:

Однако, если вы используете sprintf() вы можете получить модифицированный результат, например:

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *