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"