Справочники
Спецификаторы 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 / printf | Python | Go (fmt) | Java | Node.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 | — (игнорируются) | — | — | — |