Saya ingin mengubah string menjadi dobel dan setelah melakukan beberapa matematika di atasnya, mengubahnya kembali menjadi string.
Bagaimana saya melakukan ini di Objective-C?
Apakah ada cara untuk membulatkan dobel ke bilangan bulat terdekat juga?
Saya ingin mengubah string menjadi dobel dan setelah melakukan beberapa matematika di atasnya, mengubahnya kembali menjadi string.
Bagaimana saya melakukan ini di Objective-C?
Apakah ada cara untuk membulatkan dobel ke bilangan bulat terdekat juga?
Jawaban:
Anda dapat mengubah NSString menjadi ganda dengan
double myDouble = [myString doubleValue];
Pembulatan ke int terdekat kemudian dapat dilakukan sebagai
int myInt = (int)(myDouble + (myDouble>0 ? 0.5 : -0.5))
Jujur saya tidak yakin apakah ada cara yang lebih efisien untuk mengkonversi kembali menjadi string daripada
NSString* myNewString = [NSString stringWithFormat:@"%d", myInt];
[[NSNumber numberWithInt:myInt] stringValue]
Untuk benar-benar mengonversi dari string ke angka dengan benar, Anda perlu menggunakan instance yang NSNumberFormatterdikonfigurasikan untuk lokal tempat Anda membaca string.
Lokal yang berbeda akan memformat angka secara berbeda. Sebagai contoh, di beberapa bagian dunia, COMMAdigunakan sebagai pemisah desimal sedangkan yang lain adalah PERIOD- dan ribuan pemisah (saat digunakan) dibalik. Kecuali kalau itu ruang. Atau tidak hadir sama sekali.
Itu benar-benar tergantung pada sumber input. Hal paling aman untuk dilakukan adalah mengonfigurasikan NSNumberFormattercara input Anda diformat dan digunakan -[NSFormatter numberFromString:]untuk mendapatkannya NSNumber. Jika Anda ingin menangani kesalahan konversi, Anda dapat menggunakannya -[NSFormatter getObjectValue:forString:range:error:].
Menambah jawaban olliej, Anda dapat mengkonversi dari int kembali ke string dengan NSNumber's stringValue:
[[NSNumber numberWithInt:myInt] stringValue]
stringValuepada NSNumberinvoke descriptionWithLocale:nil, memberikan Anda representasi string nilai yang terlokalisasi. Saya tidak yakin apakah [NSString stringWithFormat:@"%d",myInt]akan memberi Anda reprsentasi yang dilokalkan dengan benar myInt.
Metode pembulatan olliej salah untuk angka negatif
Inilah alternatifnya
int myInt = (int)(myDouble + (myDouble>0 ? 0.5 : -0.5))
Anda tentu saja dapat menggunakan fungsi pembulatan dari math.h
Berikut ini adalah contoh kerja NSNumberFormatter membaca String nomor lokal (xCode 3.2.4, osX 10.6), untuk menghemat waktu yang baru saja saya habiskan untuk bermain-main. Hati-hati: walaupun dapat menangani trailing blanks seperti "8,765.4", ini tidak bisa menangani spasi putih dan ini tidak bisa menangani karakter teks yang tersesat. (String input buruk: "8" dan "8q" dan "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
nilnilai NSNumber*jika tidak dapat diuraikan. Saya tidak dapat mereproduksi masalah yang Anda miliki dengan memimpin spasi putih dan karakter teks liar, IMO itu berfungsi dengan baik. " 28.5 "mem-parsing sebagai 28,5, dan "gibberish28.5", "28.5gibberish"dan "gibberish28.5gibberish"semua unparseable; " 2 8 . 5. "tidak dapat dipilah tetapi itu tidak biasa.
// 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];
Untuk konversi dari angka ke string, bagaimana dengan menggunakan sintaks literal baru (XCode> = 4.4), ini sedikit lebih kompak.
int myInt = (int)round( [@"1.6" floatValue] );
NSString* myString = [@(myInt) description];
(Boxes sebagai NSNumber dan dikonversi ke string menggunakan metode deskripsi NSObjects ' )
Ini adalah cara termudah yang saya tahu:
float myFloat = 5.3;
NSInteger myInt = (NSInteger)myFloat;
dari contoh ini di sini, Anda dapat melihat konversi dua arah:
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);
konversi teks yang dimasukkan dalam bidang teks ke integer
double mydouble=[_myTextfield.text doubleValue];
pembulatan ke dobel terdekat
mydouble=(round(mydouble));
pembulatan ke int terdekat (hanya mempertimbangkan nilai positif)
int myint=(int)(mydouble);
mengkonversi dari dobel ke string
myLabel.text=[NSString stringWithFormat:@"%f",mydouble];
atau
NSString *mystring=[NSString stringWithFormat:@"%f",mydouble];
mengkonversi dari int ke string
myLabel.text=[NSString stringWithFormat:@"%d",myint];
atau
NSString *mystring=[NSString stringWithFormat:@"%f",mydouble];