2012-06-21 130 views
10

我正在尋找一種方式來顯示「1」,「01」,所以基本上都低於10應該有一個0領先NSNumberformatter添加額外的零

會是怎樣最好做到這一點呢? 我知道我可以使用一個簡單的if結構來做這個檢查,但是這對NSNumberformatter應該是可能的嗎?

+0

參見[我的回答(http://stackoverflow.com/a/25567534/1966109),提供了多達3個解決方案,標有'swift'類似的問題。 –

回答

21

如果你只是想一個NSString,你可以簡單地這樣做:

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

%02d是C.%ND意味着必須在字符串中至少n個字符,如果有少,墊它與0的。這裏有一個例子:

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

如果number變量不僅是兩個數字長,這將八個零前綴。如果它是9位數字,它將以一個零爲前綴。

如果你想使用NSNumberFormatter,你可以這樣做:

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

---- ------ UPDATE 我認爲這能解決你的問題:

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

謝謝,這肯定會有所幫助。但是有可能獲得stringValue再次刪除0? 我在UIPickerView中使用它,但也許只是在titleForRow –

+0

[_minutes addObject:[NSNumber numberWithInt:i]]; return [NSString stringWithFormat:@「%02 @」,[_minutes objectAtIndex:row]]; 這似乎只返回「1」,「2」 –

+0

stringValue不會再次刪除0,因爲字符串是一系列字符。例如,在字符串中,字母「a」與「0」相同。一個字符串只是存儲字符,而字母和數字都是字符。 – pasawaya

2

適用於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))! 

輸出

「0000000999.1」