Tôi muốn chuyển đổi một chuỗi thành một chuỗi và sau khi thực hiện một số phép toán trên chuỗi đó, chuyển đổi nó trở lại thành một chuỗi.
Làm thế nào để tôi làm điều này trong Objective-C?
Có cách nào để làm tròn một số đến số nguyên gần nhất không?
Tôi muốn chuyển đổi một chuỗi thành một chuỗi và sau khi thực hiện một số phép toán trên chuỗi đó, chuyển đổi nó trở lại thành một chuỗi.
Làm thế nào để tôi làm điều này trong Objective-C?
Có cách nào để làm tròn một số đến số nguyên gần nhất không?
Câu trả lời:
Bạn có thể chuyển đổi một NSString thành gấp đôi với
double myDouble = [myString doubleValue];
Làm tròn đến int gần nhất có thể được thực hiện như
int myInt = (int)(myDouble + (myDouble>0 ? 0.5 : -0.5))
Tôi thực sự không chắc chắn nếu có một cách hợp lý hơn để chuyển đổi trở lại thành một chuỗi hơn
NSString* myNewString = [NSString stringWithFormat:@"%d", myInt];
[[NSNumber numberWithInt:myInt] stringValue]
Để thực sự chuyển đổi từ một chuỗi thành một số chính xác, bạn cần sử dụng một thể hiện được NSNumberFormattercấu hình cho miền địa phương nơi bạn đang đọc chuỗi.
Các địa phương khác nhau sẽ định dạng số khác nhau. Ví dụ, ở một số nơi trên thế giới, COMMAđược sử dụng như một dấu tách thập phân trong khi ở những nơi khác PERIOD- và dấu phân cách hàng nghìn (khi được sử dụng) bị đảo ngược. Ngoại trừ khi đó là một không gian. Hoặc không có mặt ở tất cả.
Nó thực sự phụ thuộc vào nguồn gốc của đầu vào. Điều an toàn nhất để làm là định cấu hình NSNumberFormattercho cách thức đầu vào của bạn được định dạng và sử dụng -[NSFormatter numberFromString:]để lấy NSNumbertừ nó. Nếu bạn muốn xử lý các lỗi chuyển đổi, bạn có thể sử dụng -[NSFormatter getObjectValue:forString:range:error:]thay thế.
Thêm vào câu trả lời của olliej, bạn có thể chuyển đổi từ int trở lại chuỗi bằng NSNumber's stringValue:
[[NSNumber numberWithInt:myInt] stringValue]
stringValuetrên một lệnh NSNumbergọi descriptionWithLocale:nil, cung cấp cho bạn một đại diện chuỗi giá trị cục bộ. Tôi không chắc chắn nếu [NSString stringWithFormat:@"%d",myInt]bạn sẽ cung cấp cho bạn một sự hồi hương địa phương đúng myInt.
Phương pháp làm tròn của olliej là sai đối với số âm
Đây là một sự thay thế
int myInt = (int)(myDouble + (myDouble>0 ? 0.5 : -0.5))
Tất nhiên bạn có thể sử dụng hàm làm tròn từ math.h
Đây là một mẫu hoạt động của NSNumberFormatter đọc Chuỗi số cục bộ (xCode 3.2.4, osX 10.6), để tiết kiệm cho những người khác những giờ tôi vừa trải qua. Chú ý: trong khi nó có thể xử lý các khoảng trống theo sau, chẳng hạn như "8,765,4", điều này không thể xử lý khoảng trắng hàng đầu và điều này không thể xử lý các ký tự văn bản đi lạc. (Chuỗi đầu vào xấu: "8" và "8q" và "8 q".)
NSString *tempStr = @"8,765.4";
// localization allows other thousands separators, also.
NSNumberFormatter * myNumFormatter = [[NSNumberFormatter alloc] init];
[myNumFormatter setLocale:[NSLocale currentLocale]]; // happen by default?
[myNumFormatter setFormatterBehavior:NSNumberFormatterBehavior10_4];
// next line is very important!
[myNumFormatter setNumberStyle:NSNumberFormatterDecimalStyle]; // crucial
NSNumber *tempNum = [myNumFormatter numberFromString:tempStr];
NSLog(@"string '%@' gives NSNumber '%@' with intValue '%i'",
tempStr, tempNum, [tempNum intValue]);
[myNumFormatter release]; // good citizen
nilgiá trị NSNumber*nếu không thể phân tích cú pháp. Tôi không thể tái tạo vấn đề mà bạn gặp phải với khoảng trắng hàng đầu và các ký tự văn bản đi lạc, IMO nó hoạt động tốt. " 28.5 "phân tích như 28,5, và "gibberish28.5", "28.5gibberish"và "gibberish28.5gibberish"tất cả đều unparseable; " 2 8 . 5. "là không thể nhìn thấy nhưng đó không phải là bất thường.
// Converting String in to Double
double doubleValue = [yourString doubleValue];
// Converting Double in to String
NSString *yourString = [NSString stringWithFormat:@"%.20f", doubleValue];
// .20f takes the value up to 20 position after decimal
// Converting double to int
int intValue = (int) doubleValue;
or
int intValue = [yourString intValue];
Để chuyển đổi từ một số thành một chuỗi, làm thế nào về việc sử dụng cú pháp chữ mới (XCode> = 4.4), nhỏ gọn hơn một chút.
int myInt = (int)round( [@"1.6" floatValue] );
NSString* myString = [@(myInt) description];
(Đóng hộp dưới dạng NSNumber và chuyển đổi thành chuỗi bằng phương pháp mô tả của NSObjects )
Để làm tròn, có lẽ bạn nên sử dụng các hàm C được xác định trong math.h.
int roundedX = round(x);
Giữ phím Option và nhấp đúp chuột vào roundXcode và nó sẽ hiển thị cho bạn trang man với nhiều chức năng khác nhau để làm tròn các loại khác nhau.
Đây là cách dễ nhất mà tôi biết:
float myFloat = 5.3;
NSInteger myInt = (NSInteger)myFloat;
từ ví dụ này ở đây, bạn có thể thấy các chuyển đổi theo cả hai cách:
NSString *str=@"5678901234567890";
long long verylong;
NSRange range;
range.length = 15;
range.location = 0;
[[NSScanner scannerWithString:[str substringWithRange:range]] scanLongLong:&verylong];
NSLog(@"long long value %lld",verylong);
chuyển đổi văn bản đã nhập trong trường văn bản thành số nguyên
double mydouble=[_myTextfield.text doubleValue];
làm tròn đến đôi gần nhất
mydouble=(round(mydouble));
làm tròn đến int gần nhất (chỉ xem xét các giá trị dương)
int myint=(int)(mydouble);
chuyển đổi từ gấp đôi thành chuỗi
myLabel.text=[NSString stringWithFormat:@"%f",mydouble];
hoặc là
NSString *mystring=[NSString stringWithFormat:@"%f",mydouble];
chuyển đổi từ int sang chuỗi
myLabel.text=[NSString stringWithFormat:@"%d",myint];
hoặc là
NSString *mystring=[NSString stringWithFormat:@"%f",mydouble];