objective-c cocoa-touch cocoa nsstring

objective c - Rellenar un número en NSString



objective-c cocoa-touch (3)

Discúlpeme por responder a esta pregunta con una respuesta ya aceptada, pero la respuesta (en la actualización) no es la mejor solución.

Si desea tener un número arbitrario , no tiene que crear un formato para su formato, ya que IEEE printf lo admite. En su lugar haz:

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.

De la especificación de printf IEEE:

El ancho de un campo, o la precisión, o ambos, pueden indicarse con un asterisco (''*''). En este caso, un argumento de tipo int proporciona el ancho o la precisión del campo.

Tengo un int, por ejemplo, digamos 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" .

Sé que puedo contar el número de dígitos, luego restarlo de la cantidad de ceros que quiero rellenar y añadir ese número a la cadena, pero ¿existe una forma más elegante? Gracias.


Prueba esto:

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

Si funciona, entonces puede obtener el número rellenado con

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

Actualizar

Si desea tener un número arbitrario, tendrá que 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

Consulte el comentario de @ Ibmurai sobre cómo rellenar correctamente un número con NSLog.


Versión Swift como extensión Int (uno podría querer encontrar un nombre mejor 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"