2012-06-21 13 views
10

Szukam sposobu, aby wyświetlić „1” jako „01”, więc w zasadzie wszystko poniżej 10 powinien mieć wiodącą 0.NSNumberformatter dodać dodatkowy zera

Jaki byłby najlepszy sposób to zrobić? Wiem, że mogę po prostu użyć prostej struktury, aby wykonać tę kontrolę, ale powinno to być możliwe z NSNumberformatter w prawo?

+0

See [moja odpowiedź] (http://stackoverflow.com/a/25567534/1966109), który oferuje do 3 rozwiązań dla podobnych pytanie oznaczone tagiem 'swift'. –

Odpowiedz

21

Jeśli chcesz tylko NSString, można po prostu to zrobić:

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

%02d jest z C.% ND oznacza, że ​​musi być co najmniej n znaków w ciąg i jeśli istnieją mniej, podkładka to z zerami. Oto przykład:

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

Jeśli tylko zmienna number była długa dwie cyfry, to być poprzedzony ośmioma zerami. Jeśli ma 9 cyfr, zostanie poprzedzone pojedynczym zerem.

Jeśli chcesz użyć NSNumberFormatter, można to zrobić:

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

---- UPDATE ------ myślę, że to rozwiązuje problem:

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

Dzięki, to na pewno pomoże. Ale czy jest możliwe, że pobieranie stringValue ponownie usuwa 0? Używam tego w UIPickerView, ale może po prostu lepiej to zrobić w titleForRow –

+0

[_minutes addObject: [NSNumber numberWithInt: i]]; return [NSString stringWithFormat: @ "% 02 @", [_minutes objectAtIndex: row]]; To wydaje się zwracać "1", "2" –

+0

Parametr stringValue nie usunąłby ponownie 0, ponieważ ciąg znaków jest ciągiem znaków. W ciągu znaków litera "a" na przykład jest taka sama jak "0". Łańcuch po prostu przechowuje znaki, a zarówno litery, jak i cyfry są znakami. – pasawaya

2

NAPRAWIONO dla 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))! 

WYJŚCIE

"+0000000999,1"

Powiązane problemy