2012-06-21 11 views
10

Busco una forma de mostrar "1" como "01", por lo que, básicamente, todo por debajo de 10 debe tener un 0 inicialNSNumberformatter añadir cero extra

¿Cuál sería la mejor manera de hacer esto? Sé que puedo usar simplemente una estructura if para hacer esta comprobación, pero esto debería ser posible con NSNumberformatter ¿verdad?

+0

Ver [mi respuesta] (http://stackoverflow.com/a/25567534/1966109) que ofrece hasta 3 soluciones para una pregunta similar etiquetados con 'swift'. –

Respuesta

21

Si lo que desea es un NSString, simplemente puede hacer esto:

NSString *myNumber = [NSString stringWithFormat:@"%02d", number]; 

El %02d es de C.% nd significa que debe haber al menos n caracteres de la cadena y si hay menos, la almohadilla con 0's. He aquí un ejemplo:

NSString *example = [NSString stringWithFormat:@"%010d", number]; 

Si la variable number solamente era dos dígitos de longitud, que se prefija por ocho ceros. Si tuviera 9 dígitos de longitud, estaría prefijado con un solo cero.

Si desea utilizar NSNumberFormatter, usted puede hacer esto:

NSNumberFormatter * numberFormatter = [[NSNumberFormatter alloc] init]; 
[numberFormatter setPaddingPosition:NSNumberFormatterPadBeforePrefix]; 
[numberFormatter setPaddingCharacter:@"0"]; 
[numberFormatter setMinimumIntegerDigits:10]; 
NSNumber *number = [NSNumber numberWithInt:numberVariableHere]; 

---- ------ ACTUALIZACIÓN Creo que esto resuelve su problema:

[_minutes addObject:[NSNumber numberWithInt:i]]; 
return [NSString stringWithFormat:@"%02d", [[_minutes objectAtIndex:row] intValue]]; 
+0

Gracias, eso seguro ayudará. ¿Pero es posible que obtener stringValue elimine el 0 nuevamente? Estoy usando esto en un UIPickerView, pero quizás sea mejor hacer esto en titleForRow –

+0

[_minutes addObject: [NSNumber numberWithInt: i]]; return [NSString stringWithFormat: @ "% 02 @", [_minutes objectAtIndex: row]]; Esto parece devolver "1", "2" –

+0

Un stringValue no eliminaría el 0 nuevamente porque una cadena es una serie de caracteres. En una cadena, la letra 'a' por ejemplo, es lo mismo que '0'. Una cadena simplemente almacena caracteres, y tanto letras como números son caracteres. – pasawaya

2

fijo para Swift 3

let x = 999.1243 
let formatter = NumberFormatter() 
formatter.minimumFractionDigits = 1 // for float 
formatter.maximumFractionDigits = 1 // for float 
formatter.minimumIntegerDigits = 10 // digits do want before decimal 
formatter.paddingPosition = .beforePrefix 
formatter.paddingCharacter = "0" 

let s = formatter.string(from: NSNumber(floatLiteral: x))! 

SALIDA

"0000000999,1"

Cuestiones relacionadas