2012-06-21 15 views
10

Sto cercando un modo per visualizzare "1" come "01", in modo sostanzialmente tutto inferiore a 10 dovrebbe avere un leader 0.NSNumberformatter aggiungere zero extra

Quale sarebbe il modo migliore per farlo? So che posso usare una semplice struttura if per fare questo controllo, ma questo dovrebbe essere possibile con NSNumberformatter giusto?

+0

Sede [la mia risposta] (http://stackoverflow.com/a/25567534/1966109), che offre fino a 3 soluzioni per una domanda simile con i tag 'swift'. –

risposta

21

Se si desidera solo un NSString, si può semplicemente fare questo:

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

Il %02d da C.% nd significa che ci deve essere almeno n caratteri della stringa e se ci sono meno, pad con gli 0 Ecco un esempio:

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

Se la variabile number stato solo lungo due cifre, sarebbe preceduto da otto zeri. Se fosse lungo 9 cifre, sarebbe preceduto da un singolo zero.

Se si desidera utilizzare NSNumberFormatter, si potrebbe fare questo:

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

---- UPDATE ------ Penso che questo risolve il problema:

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

Grazie, questo sicuramente aiuterà. Ma è possibile che ottenere lo stringValue rimuova lo 0 di nuovo? Lo sto usando in UIPickerView, ma forse è meglio farlo in titleForRow –

+0

[_minutes addObject: [NSNumber numberWithInt: i]]; return [NSString stringWithFormat: @ "% 02 @", [_minutes objectAtIndex: row]]; Questo sembra restituire "1", "2" –

+0

Un valore stringa non rimuove lo 0 nuovamente perché una stringa è una serie di caratteri. In una stringa, ad esempio, la lettera 'a' è uguale a '0'. Una stringa memorizza solo caratteri, e sia lettere che numeri sono caratteri. – pasawaya

2

FISSO per 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))! 

USCITA

"0000000999,1"

Problemi correlati