Подтвердить что ты не робот

Заполнение числа в NSString

У меня есть int, например, 45. Я хочу получить NSString из этого int, заполненного 4 нулями. Таким образом, результат будет: @"0045". Аналогично, если int равно 9, я хочу получить: @"0009".

Я знаю, что могу подсчитать количество цифр, а затем вычесть его из числа нулей, которые я хочу заполнить, и добавить это число в строку, но есть ли более элегантный способ? Спасибо.

4b9b3361

Ответ 1

Попробуйте следующее:

NSLog(@"%04d", 45);
NSLog(@"%04d", 9);

Если это работает, вы можете получить заполненный номер с помощью

NSString *paddedNumber = [NSString stringWithFormat:@"%04d", 45];
NSString *otherPaddedNumber = [NSString stringWithFormat:@"%04d", 9];

Обновление

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

// create "%04d" format string
NSString *paddingFormat = [NSString stringWithFormat:@"%%0%dd", 4];

// use it for padding numbers
NSString *paddedNumber = [NSString stringWithFormat:paddingFormat, 45];
NSString *otherPaddedNumber = [NSString stringWithFormat:paddingFormat, 9];

Обновление 2

Пожалуйста, см. комментарий @Ibmurai о том, как правильно помещать номер в NSLog.

Ответ 2

Извините меня за ответ на этот вопрос с уже принятым ответом, но ответ (в обновлении) - это не лучшее решение.

Если вы хотите иметь произвольное число, вы не должны создавать формат для своего формата, а IEEE printf поддерживает это. Вместо этого выполните:

NSString *paddedNumber = [NSString stringWithFormat:@"%0*d", 4, 45];
NSString *otherPaddedNumber = [NSString stringWithFormat:@"%0*d", 4, 9];

В то время как другое решение работает, оно менее эффективно и элегантно.

Из спецификации IEEE printf:

Ширина поля, или точность, или и то, и другое могут быть обозначены звездочкой ('*'). В этом случае аргумент типа int предоставляет ширину поля или точность.

Ответ 3

Быстрая версия как расширение Int (можно было бы придумать лучшее имя для этого метода):

extension Int
{
    func zeroPaddedStringValueForFieldWidth(fieldWidth: Int) -> String
    {
        return String(format: "%0*d", fieldWidth, self)
    }
}

Примеры:

print( 45.zeroPaddedStringValueForFieldWidth(4) ) // prints "0045"
print( 9.zeroPaddedStringValueForFieldWidth(4) ) // prints "0009"