ฉันต้องการแปลงสตริงให้เป็นสองเท่าและหลังจากทำการคำนวณทางคณิตศาสตร์แล้วให้แปลงกลับเป็นสตริง
ฉันจะทำสิ่งนี้ใน Objective-C ได้อย่างไร
มีวิธีการปัดเศษเป็นสองเท่าเป็นจำนวนเต็มที่ใกล้เคียงด้วยหรือไม่?
ฉันต้องการแปลงสตริงให้เป็นสองเท่าและหลังจากทำการคำนวณทางคณิตศาสตร์แล้วให้แปลงกลับเป็นสตริง
ฉันจะทำสิ่งนี้ใน Objective-C ได้อย่างไร
มีวิธีการปัดเศษเป็นสองเท่าเป็นจำนวนเต็มที่ใกล้เคียงด้วยหรือไม่?
คำตอบ:
คุณสามารถแปลง NSString เป็นคู่ด้วย
double myDouble = [myString doubleValue];
การปัดเศษเป็น int ที่ใกล้ที่สุดสามารถทำได้ดังนี้
int myInt = (int)(myDouble + (myDouble>0 ? 0.5 : -0.5))
ฉันไม่แน่ใจว่าหากมีวิธีที่คล่องตัวกว่าในการแปลงกลับเป็นสตริงมากกว่า
NSString* myNewString = [NSString stringWithFormat:@"%d", myInt];
[[NSNumber numberWithInt:myInt] stringValue]
ในการแปลงจากสตริงเป็นจำนวนจริงอย่างถูกต้องคุณต้องใช้อินสแตนซ์ของNSNumberFormatter
การกำหนดค่าสำหรับสถานที่ที่คุณกำลังอ่านสตริง
ตำแหน่งที่ตั้งอื่นจะจัดรูปแบบตัวเลขต่างกัน ตัวอย่างเช่นในบางส่วนของโลกCOMMA
จะใช้เป็นตัวคั่นทศนิยมขณะที่อยู่ในส่วนอื่น ๆ คือPERIOD
- และตัวคั่นหลักพัน (เมื่อใช้) จะถูกย้อนกลับ ยกเว้นเมื่อเป็นพื้นที่ หรือไม่ปรากฏเลย
มันขึ้นอยู่กับที่มาของอินพุต สิ่งที่ปลอดภัยที่สุดที่จะทำคือการกำหนดค่าNSNumberFormatter
สำหรับวิธีการจัดรูปแบบการป้อนข้อมูลของคุณและใช้-[NSFormatter numberFromString:]
เพื่อรับNSNumber
จากมัน หากคุณต้องการจัดการข้อผิดพลาดในการแปลงคุณสามารถใช้-[NSFormatter getObjectValue:forString:range:error:]
แทน
เพิ่มคำตอบ olliej ของคุณสามารถแปลงจาก int กลับไปสตริงกับNSNumber
's stringValue
:
[[NSNumber numberWithInt:myInt] stringValue]
stringValue
ในการNSNumber
เรียกใช้descriptionWithLocale:nil
ให้การแทนค่าสตริงที่แปลแล้ว ฉันไม่แน่ใจว่า[NSString stringWithFormat:@"%d",myInt]
จะให้คำตอบแก่คุณเป็นภาษาท้องถิ่นmyInt
หรือไม่
วิธีการปัดเศษ olliej นั้นผิดสำหรับจำนวนลบ
นี่คือทางเลือก
int myInt = (int)(myDouble + (myDouble>0 ? 0.5 : -0.5))
แน่นอนคุณสามารถใช้ฟังก์ชันการปัดเศษจาก math.h
ต่อไปนี้เป็นตัวอย่างการทำงานของ NSNumberFormatter ที่อ่านการแปลหมายเลข String (xCode 3.2.4, osX 10.6) เพื่อประหยัดเวลาอื่น ๆ ที่ฉันเพิ่งทำไป ระวัง: ในขณะที่สามารถจัดการกับช่องว่างต่อท้ายเช่น "8,765.4" นี้ไม่สามารถจัดการกับพื้นที่สีขาวชั้นนำและสิ่งนี้ไม่สามารถจัดการกับตัวอักษรข้อความหลงทาง (สตริงอินพุตไม่ถูกต้อง: "8" และ "8q" และ "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
nil
ค่าNSNumber*
หากไม่สามารถแยกวิเคราะห์ได้ ฉันไม่สามารถทำซ้ำปัญหาที่คุณมีกับพื้นที่ว่างสีขาวและอักขระข้อความจรจัดชั้นนำได้ IMO ทำงานได้อย่างถูกต้อง " 28.5 "
แยกวิเคราะห์เป็น 28.5 และ"gibberish28.5"
, "28.5gibberish"
และ"gibberish28.5gibberish"
มีทั้งหมด unparseable; " 2 8 . 5. "
ไม่สามารถแยกวิเคราะห์ได้ แต่ก็ไม่ได้ผิดปกติ
// 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];
สำหรับการแปลงจากตัวเลขเป็นสตริงวิธีการเกี่ยวกับการใช้ไวยากรณ์ตัวอักษรใหม่ (XCode> = 4.4) มันมีขนาดกะทัดรัดกว่าเล็กน้อย
int myInt = (int)round( [@"1.6" floatValue] );
NSString* myString = [@(myInt) description];
(ทำกล่องเป็นNSNumberและแปลงเป็นสตริงโดยใช้วิธีการอธิบายของ NSObjects )
สำหรับการปัดเศษคุณควรใช้ฟังก์ชัน C ที่กำหนดไว้ใน math.h
int roundedX = round(x);
กดตัวเลือกค้างไว้แล้วดับเบิลคลิกที่round
Xcode และมันจะแสดง man page ที่มีฟังก์ชั่นต่าง ๆ สำหรับการปัดเศษประเภทต่างๆ
นี่เป็นวิธีที่ง่ายที่สุดที่ฉันรู้:
float myFloat = 5.3;
NSInteger myInt = (NSInteger)myFloat;
จากตัวอย่างนี้ที่นี่คุณสามารถเห็นการแปลงทั้งสองวิธี:
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);
แปลงข้อความที่ป้อนในฟิลด์ข้อความเป็นจำนวนเต็ม
double mydouble=[_myTextfield.text doubleValue];
ปัดเศษเป็นสองเท่าที่ใกล้ที่สุด
mydouble=(round(mydouble));
การปัดเศษเป็น int ที่ใกล้ที่สุด (พิจารณาเฉพาะค่าบวก)
int myint=(int)(mydouble);
การแปลงจาก double เป็น string
myLabel.text=[NSString stringWithFormat:@"%f",mydouble];
หรือ
NSString *mystring=[NSString stringWithFormat:@"%f",mydouble];
การแปลงจาก int เป็นสตริง
myLabel.text=[NSString stringWithFormat:@"%d",myint];
หรือ
NSString *mystring=[NSString stringWithFormat:@"%f",mydouble];
ฉันลงเอยด้วยการใช้มาโครตัวนี้:
#define STRING(value) [@(value) stringValue]