2011-08-15 26 views
21

Tôi có một int, ví dụ như nói 45. Tôi muốn nhận NSString từ int đệm này với 4 số không. Vì vậy, kết quả sẽ là: @"0045". Tương tự, nếu int là 9, tôi muốn nhận được: @"0009".Đệm một số trong NSString

Tôi biết tôi có thể đếm số chữ số, sau đó trừ số từ số 0 tôi muốn đệm và thêm số đó vào chuỗi, nhưng có cách nào thanh lịch hơn không? Cảm ơn.

Trả lời

34

Hãy thử điều này:

NSLog(@"%04d", 45); 
NSLog(@"%04d", 9); 

Nếu nó hoạt động, sau đó bạn có thể nhận được số đệm bằng

NSString *paddedNumber = [NSString stringWithFormat:@"%04d", 45]; 
NSString *otherPaddedNumber = [NSString stringWithFormat:@"%04d", 9]; 

Cập nhật

Nếu bạn muốn có số tùy ý bạn muốn có để tạo định dạng cho định dạng của bạn:

// create "%04d" format string 
NSString *paddingFormat = [NSString stringWithFormat:@"%%0%dd", 4]; 

// use it for padding numbers 
NSString *paddedNumber = [NSString stringWithFormat:paddingFormat, 45]; 
NSString *otherPaddedNumber = [NSString stringWithFormat:paddingFormat, 9]; 

Cập nhật 2

Xin xem @ bình luận Ibmurai về làm thế nào để đúng pad một số với NSLog.

+0

Cảm ơn bạn đã trả lời nhanh chóng. Điều này hoạt động hoàn hảo, nhưng làm thế nào tôi có thể chỉ định một số tùy ý? Tôi đã thử: NSLog (@ "% 0% id", 4, 45); nhưng điều này không hiệu quả. Cảm ơn một lần nữa. – RungaDeMungoezz

+0

Tôi đã cập nhật câu trả lời của mình – Eimantas

+0

Cảm ơn anh bạn! bạn đã cứu cuộc đời tôi. – RungaDeMungoezz

20

Xin lỗi vì đã trả lời câu hỏi này với câu trả lời đã được chấp nhận, nhưng câu trả lời (trong bản cập nhật) là không phải là giải pháp tốt nhất.

Nếu bạn muốn có số tùy ý, bạn không phải tạo định dạng cho định dạng của mình, vì IEEE printf hỗ trợ định dạng này. Thay vào đó, hãy thực hiện:

NSString *paddedNumber = [NSString stringWithFormat:@"%0*d", 4, 45]; 
NSString *otherPaddedNumber = [NSString stringWithFormat:@"%0*d", 4, 9]; 

Trong khi giải pháp khác hoạt động, nó kém hiệu quả và thanh lịch hơn.

Từ đặc điểm kỹ thuật IEEE printf:

Một chiều rộng lĩnh vực, hoặc chính xác, hoặc cả hai, có thể được thể hiện bằng một dấu sao ('*'). Trong trường hợp này, đối số của kiểu int cung cấp chiều rộng hoặc độ chính xác của trường.

0

phiên bản Swift như Int mở rộng (một sức mạnh muốn tìm ra một cái tên hay hơn cho phương pháp đó):

extension Int 
{ 
    func zeroPaddedStringValueForFieldWidth(fieldWidth: Int) -> String 
    { 
     return String(format: "%0*d", fieldWidth, self) 
    } 
} 

Ví dụ:

print(45.zeroPaddedStringValueForFieldWidth(4)) // prints "0045" 
print(9.zeroPaddedStringValueForFieldWidth(4)) // prints "0009" 
Các vấn đề liên quan