2011-08-15 15 views
21

Tengo un int, por ejemplo, digo 45. Quiero obtener NSString de este int rellenado con 4 ceros. Entonces el resultado sería: @"0045". Similar, si el int es 9, quiero obtener: @"0009".Relleno de un número en NSString

Sé que puedo contar el número de dígitos, luego restarlo del número de ceros que quiero acolchado, y anteponer ese número a la cadena, pero ¿hay una manera más elegante? Gracias.

Respuesta

34

Prueba esto:

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

Si funciona, entonces se puede obtener el número de acolchado con

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

actualización

Si usted quiere tener un número arbitrario que tendría para crear un formato para su formato:

// 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]; 

Actualización 2

Por favor, ver el comentario de @ Ibmurai sobre cómo adecuadamente la almohadilla con un número NSLog.

+0

Gracias por la rápida respuesta. Esto funciona perfectamente, pero ¿cómo puedo especificar un número arbitrario? Intenté: NSLog (@ "% 0% id", 4, 45); pero esto no funciona Gracias de nuevo. – RungaDeMungoezz

+0

He actualizado mi respuesta – Eimantas

+0

Gracias amigo! me salvaste la vida. – RungaDeMungoezz

20

Disculpe por haber respondido esta pregunta con una respuesta ya aceptada, pero la respuesta (en la actualización) es not la mejor solución.

Si desea tener un número arbitrario, no tiene que crear un formato para su formato, ya que IEEE printf es compatible con esto. En su lugar, haga:

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

Mientras que la otra solución funciona, es menos efectiva y elegante.

partir de la especificación IEEE printf:

una anchura de campo, o la precisión, o ambos, puede ser indicado por un asterisco ('*'). En este caso, un argumento de tipo int proporciona el ancho o la precisión del campo.

0

versión Swift como la extensión Int (quiero uno podría llegar a un mejor nombre para ese método):

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

Ejemplos:

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