Как добавить ведущие нули к числу Int в Swift для вывода на экран?
Использование форматирования строк через String(format:)
В Swift есть отличный встроенный способ решения этой задачи — использование инициализатора String(format:). Он работает аналогично функции printf в C и позволяет задать точное количество цифр с ведущими нулями.
let number = 7
let formatted = String(format: "%03d", number)
print(formatted) // Выведет: "007"
Разберём спецификатор формата %03d:
%— начало спецификатора0— заполнять пустые позиции нулями3— минимальная ширина поля (всего 3 символа)d— десятичное целое число (Int)
Примеры работы:
print(String(format: "%03d", 7)) // "007"
print(String(format: "%03d", 42)) // "042"
print(String(format: "%03d", 123)) // "123"
print(String(format: "%03d", 0)) // "000"
print(String(format: "%03d", -5)) // "-05" (минус считается символом)
Динамическая ширина
Если нужно задать количество цифр переменной, можно использовать звёздочку *:
let width = 5
let number = 42
let formatted = String(format: "%0*d", width, number)
print(formatted) // "00042"
Для чисел с плавающей точкой
Аналогично можно форматировать Double/Float:
let pi = 3.14159
let formatted = String(format: "%08.3f", pi)
print(formatted) // "0003.142" (8 символов всего, 3 знака после запятой)
Альтернатива: NumberFormatter
Для более сложных сценариев (локализация, группировка разрядов) используйте NumberFormatter:
let formatter = NumberFormatter()
formatter.minimumIntegerDigits = 3
formatter.maximumIntegerDigits = 3
let number = 7
if let formatted = formatter.string(from: NSNumber(value: number)) {
print(formatted) // "007"
}
Этот способ предпочтительнее, если вы работаете с пользовательским интерфейсом и хотите учитывать региональные настройки (например, разделители тысяч).
Важные замечания
String(format:)работает только с типами, которые поддерживаются в Objective-C (Int, Double, Float, NSString и т.д.). Для чистых Swift-типов, таких какInt, проблем нет — они автоматически мостятся.- Будьте осторожны с отрицательными числами: знак минус занимает одну позицию.
- Если число превышает заданную ширину, ведущие нули не добавляются — ширина является минимальной.
Используйте String(format:) — это самый простой и популярный способ в Swift для добавления ведущих нулей к целым числам.
Решение через строковые манипуляции
Если по каким-то причинам вы не хотите использовать String(format:) (например, в среде, где он недоступен), можно сделать это вручную, используя свойства строки:
func padWithZeros(_ number: Int, to length: Int) -> String {
let string = String(number)
let zerosNeeded = max(0, length - string.count)
return String(repeating: "0", count: zerosNeeded) + string
}
print(padWithZeros(7, to: 3)) // "007"
print(padWithZeros(42, to: 3)) // "042"
print(padWithZeros(123, to: 3)) // "123"
Этот подход:
- Явно показывает логику работы
- Не зависит от форматирования C-style
- Работает с любыми числами (в том числе с отрицательными — минус останется первым символом, а нули добавятся после него)
Для отрицательных чисел можно модифицировать функцию:
func padWithZeros(_ number: Int, to length: Int) -> String {
let isNegative = number < 0
let absString = String(abs(number))
let zerosNeeded = max(0, length - absString.count)
let padded = String(repeating: "0", count: zerosNeeded) + absString
return isNegative ? "-" + padded : padded
}
print(padWithZeros(-7, to: 3)) // "-007"
print(padWithZeros(-42, to: 3)) // "-042"
Этот способ хорош для обучения и понимания, но в реальных проектах лучше использовать String(format:) — он короче и понятнее для других разработчиков.