2012-06-21 20 views
10

Tôi đang tìm cách hiển thị "1" là "01", vì vậy về cơ bản mọi thứ dưới 10 phải có hàng đầu 0.NSNumberformatter thêm số không

Cách tốt nhất để làm điều này là gì? Tôi biết tôi chỉ có thể sử dụng cấu trúc đơn giản nếu thực hiện việc kiểm tra này, nhưng điều này có thể thực hiện được với NSNumberformatter phải không?

+0

Xem [câu trả lời của tôi] (http://stackoverflow.com/a/25567534/1966109) mà cung cấp lên đến 3 giải pháp cho một câu hỏi tương tự được gắn thẻ với 'swift'. –

Trả lời

21

Nếu bạn chỉ muốn một NSString, bạn chỉ có thể làm điều này:

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

Các %02d là từ C.% nd nghĩa là phải có ít nhất n ký tự trong chuỗi và nếu có ít hơn, pad nó bằng 0. Dưới đây là ví dụ:

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

Nếu biến số number chỉ dài hai chữ số, nó sẽ được bắt đầu bằng tám số 0. Nếu nó dài 9 chữ số, nó sẽ được đặt trước bằng một số không.

Nếu bạn muốn sử dụng NSNumberFormatter, bạn có thể làm điều này:

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

---- CẬP NHẬT ------ Tôi nghĩ rằng điều này giải quyết vấn đề của bạn:

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

Xin cảm ơn, điều đó chắc chắn sẽ hữu ích. Nhưng có thể là việc stringValue loại bỏ 0 lần nữa không? Tôi đang sử dụng tính năng này trong UIPickerView, nhưng có lẽ chỉ nên làm điều này trong titleForRow –

+0

[_minutes addObject: [NSNumber numberWithInt: i]]; trả về [NSString stringWithFormat: @ "% 02 @", [_minutes objectAtIndex: row]]; Điều này dường như chỉ trả lại "1", "2" –

+0

ChuỗiValue sẽ không xóa 0 lần nữa vì chuỗi là một chuỗi ký tự. Trong một chuỗi, chữ cái 'a' chẳng hạn, giống như '0'. Một chuỗi chỉ lưu trữ các ký tự và cả chữ cái và số đều là các ký tự. – pasawaya

2

FIXED cho 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))! 

OUTPUT

"0000000999,1"

Các vấn đề liên quan