2012-01-15 45 views
6

Có cách nào để định dạng một NSNumber với số 0 và số thập phân hàng đầu không? Ví dụ, tôi cần phải có khả năng viết 4.5 cũng như 000. Hiện tại tôi có nó ở đó nó sẽ cho phép số thập phân, nhưng không cho phép số 0.NSNumberFormatter dẫn số 0 và số thập phân

NSNumberFormatter *f = [[NSNumberFormatter alloc] init]; 
f.numberStyle = NSNumberFormatterNoStyle; 

NSString *myString = [f numberFromString:@"4.5"]; 
NSLog(@"myString: %@",myString); 

NSString *myOtherString = [f numberFromString:@"000"]; 
NSLog(@"myOtherString:%@",myOtherString); 

Đầu ra từ trên sẽ là: 'myString: 4.5' và 'myOtherString: 0'. Tôi cần có khả năng làm cả '4.5' và '000' làm đầu ra.

Tôi đã xem "Hướng dẫn định dạng dữ liệu" của Apple mà không có nhiều thành công.

+0

Bạn biết đấy, tôi nghĩ chúng tôi đang trả lời sai. Chúng tôi đang lấy một chuỗi và chuyển đổi nó thành một số và sau đó trở lại một chuỗi ?? Và tôi nghĩ điều được mong muốn là một con số. Bạn có thể vui lòng cho chúng tôi biết nếu bạn thực sự muốn một chuỗi hoặc một số. Và nó bắt đầu từ cái gì ?? Bạn mã và câu hỏi là một chút sai lệch. Chúc mừng – markhunte

+0

@markhunte Tôi nhận thấy điều tương tự vì vậy tôi đã cung cấp các triển khai tùy chọn để tạo 'NSNumber'. Ngoài ra còn có câu hỏi về 'NSNumber' thậm chí còn cần thiết vì vậy tôi đã cung cấp các triển khai tùy chọn bằng cách sử dụng' NSNumber'. – zaph

+0

@markhunte Đầu vào là từ một UITextField. Nó dành cho các kích thước được mô tả là: 0000,000,00,0,1,2,3 ... cũng như 4,5,5,25, v.v. Kiểu CoreData là float và thuộc tính là NSNumber (bởi vì tôi muốn có thể sắp xếp nó trong một bảng được nhóm, số lượng: 0,1,2,11,23 không 0,1,11,2,23). Nó được hiển thị trong ô bảng dưới dạng văn bản. Chuyển đổi là từ chuỗi thành số thành chuỗi. Câm tôi biết. Tuy nhiên, NSNumericSearch dường như không hoạt động cho iOS, ít nhất là đối với tôi.Tôi đã bỏ qua 000 trong quá khứ, nhưng một số khách hàng muốn có khả năng đó. – Kurt

Trả lời

1

Bạn có thể thử một cái gì đó như:

NSString *myString = [NSString stringWithFormat:@"%03f", [myNSNumber floatValue]]; 

này, sau khi printf format, sẽ in số điện thoại buộc ít nhất 3 chữ số được in và đệm với 'bất kỳ không gian trống rỗng 0 của.

+1

Định dạng @ "% 03f" sẽ in: 4.500000 và 0.000000. – zaph

+0

cho tôi strDonation = [NSString stringWithFormat: @ "0% d", [strDonation integerValue]]; w0rked – iMeMyself

6

Lưu ý rằng [f numberFromString:@"4.5"] lợi nhuận một không NSNumber* một NSString*

Bạn muốn một cái gì đó như thế này:

NSNumberFormatter *f = [[NSNumberFormatter alloc] init]; 
f.numberStyle = NSNumberFormatterNoStyle; 

NSNumber *myNumber; 
NSString *myString; 

myNumber = [f numberFromString:@"4.5"]; 
[f setNumberStyle:kCFNumberFormatterDecimalStyle]; 
myString = [f stringFromNumber:myNumber]; 
NSLog(@"myString: %@",myString); 

myNumber = [f numberFromString:@"000"]; // Note that the extra zeros are useless 
[f setFormatWidth:3]; 
[f setPaddingCharacter:@"0"]; 
myString = [f stringFromNumber:myNumber]; 
NSLog(@"myString: %@",myString); 

NSLog đầu ra:

myString: 4.5
myString: 000

Nếu bạn không có dây để bắt đầu chỉ cần tạo numbe r như:

myNumber = [NSNumber numberWithFloat:4.5]; 
myNumber = [NSNumber numberWithInt:0]; 

Hoặc chỉ cần sử dụng định dạng tiêu chuẩn:

myString = [NSString stringWithFormat:@"%.1f", [myNumber floatValue]]; 
myString = [NSString stringWithFormat:@"%03d", [myNumber intValue]]; 

Hoặc nếu bạn không cần một đại diện NSNumber chỉ cần sử dụng định dạng tiêu chuẩn:

myString = [NSString stringWithFormat:@"%.1f", 4.5]; 
myString = [NSString stringWithFormat:@"%03d", 0]; 
+0

Tôi biết 000 là vô dụng. Nó không phải là một giá trị, nó là một mô tả về kích thước. Trường nhập có thể có: 0000,000,00 hoặc số nguyên hoặc phao. Tôi nghĩ rằng tôi có thể phải làm điều này một cách khác nhau. Tôi có thể phải sử dụng dây và thiết lập một loại tùy chỉnh, mặc dù tôi đã thử với NSNumericSearch mà không có niềm vui. – Kurt

1

Làm thế nào về vấn đề này như một biến thể về chủ đề cho số 000 của

NSNumber *myNumber; 
NSString *myString [email protected]"000" ; 
NSString * myStringResult; 
NSNumberFormatter *f = [[NSNumberFormatter alloc] init]; 
f.numberStyle = NSNumberFormatterNoStyle; 
[f setHasThousandSeparators:FALSE]; //-- remove seperator 
[f setMinimumIntegerDigits:[myString length ]]; //-- set minimum number of digits to display using the string length. 



myNumber = [f numberFromString:myString]; 



myStringResult = [f stringFromNumber:myNumber]; 
NSLog(@"myStringResult: %@",myStringResult); 
+0

Vì vậy, nó không .. cập nhật câu trả lời. cảm ơn – markhunte

+0

Chúc mừng, tôi chỉ làm việc đó cho trường hợp 000. Nhưng vào phút cuối cùng của thời điểm trước khi đăng bài đã thử nó với 45 thay vì 4,5 do nhầm lẫn. Đó là lý do tại sao tôi thêm vào nó làm việc cho cả hai con số. Nhưng như bạn nói nó không phải là không phải là ý định thực sự của tôi anyway. – markhunte

0

Vì điều này được hỏi thường xuyên và tài liệu của Apple hút, đây là câu trả lời mà mọi người sẽ tìm kiếm. Liên kết bên dưới có hai giải pháp. Một người sử dụng NSString stringWithFormat: và người kia sử dụng NSNumberFormatter.

https://stackoverflow.com/a/11131497/1058199

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