На главную

Справочники

Спецификаторы printf

Спецификаторы форматирования строк рядом в C, Python, Go, Java и Node.js — и песочница: вставьте формат и аргументы, увидите результат и разбор каждого %.

Как в C (glibc)

Песочница printf

Строки с запятыми — в кавычках. Числа можно писать как 0xff, 1e3, inf.

Результат

Итого·····|·1234.50|00042
  • %-10s — строка, ширина 10, выравнивание влево
  • %8.2f — дробное с фиксированной точкой, ширина 8, 2 знаков после точки
  • %05d — целое со знаком, ширина 5, дополнить нулями

Пробелы в результате показаны точками. Округление ровной половины (%.0f от 2.5) в C идёт к чётному, а здесь — как в JavaScript, вверх.

ЧтоC / printfPythonGo (fmt)JavaNode.js util.format
Целое десятичное

В Node %d превращает строку «42» в число 42, а объект — в NaN.

%d, %i%d · {:d}%d%d%d, %i
Беззнаковое

В C %u от -1 даёт 4294967295: отрицательное число читается как беззнаковое.

%u— (%u устарел и равен %d)— (%d)
Шестнадцатеричное

Go и Python умеют %x и для строк/байтов: печатают их в hex.

%x, %X%x, %X · {:x}, {:X}%x, %X%x, %X
Восьмеричное %o%o · {:o}%o, %O (с префиксом 0o)%o
Двоичное

В Java %b — это не двоичное число, а логическое значение!

%b (только C23){:b}%b— (Integer.toBinaryString)
Дробное с фиксированной точкой

Точность по умолчанию — 6 знаков: %f от 1.5 даёт 1.500000.

%f, %F%f, %F · {:f}%f, %F%f%f (без точности)
Экспоненциальная запись

В C и Python порядок минимум из двух цифр: 1.5e+00.

%e, %E%e, %E · {:e}%e, %E%e, %E
Кратчайшая запись

В C, Python и Go %g убирает хвостовые нули; в Java %g их оставляет и понимает точность иначе.

%g, %G%g, %G · {:g}%g, %G%g, %G
Строка %s%s · {} · {!s}%s%s%s
Символ %c%c%c (руна по коду)%c%c — стиль CSS в консоли браузера, Node его пропускает
Значение «как в коде»

Go: %+v добавляет имена полей структуры, %#v печатает её как литерал Go.

%r · {!r}%v, %+v, %#v%o, %O, %j (JSON)
Тип значения {!r} и type(x)%T
Логическое %s%t%b, %B%s
Строка в кавычках %r · {!r}%q%j
Указатель / адрес %p— (id(x))%p%h (хэш-код)
Знак процента

В f-строках и format() экранируются фигурные скобки: {{ и }}. А {:%} умножает число на 100 и дописывает %.

%%%% · в format() просто %%%%%%%
Ширина поля

Минус — выравнивание влево. Python умеет ещё и по центру (^).

%8d, %-8s%8d · {:>8}, {:<8}, {:^8}%8d, %-8s%8d, %-8s— (padStart / padEnd)
Дополнить нулями %08d%08d · {:08d}%08d%08d
Точность

Для строк точность обрезает: %.3s от «Привет» даёт «При».

%.2f, %.3s%.2f · {:.2f}, {:.3}%.2f, %.3s%.2f, %.3s— (toFixed)
Ширина из аргумента %*d, %.*f%*d · {:{w}d}%*d, %.*f
Знак у положительных %+d, % d%+d · {:+d}, {: d}%+d, % d%+d, % d
Префикс системы счисления %#x → 0x1f, %#o → 037%#x · {:#x}, {:#b}%#x, %#o, %#b%#x, %#o
Разделитель тысяч %'d (POSIX, по локали){:,} · {:_}%,d— (toLocaleString)
Номер аргумента

Позволяет переставлять слова в переводах без смены порядка аргументов.

%1$s (POSIX){0}, {1}, {name}%[1]d%1$s, %<s (тот же, что прошлый)
Перевод строки \n\n\n%n (по платформе)\n
Модификаторы длины

В C тип обязан совпадать с аргументом: %d с long на 64-битной системе — неопределённое поведение.

%ld, %lld, %zu, %hhd, %Lf— (игнорируются)