12 ответов:
вы можете преобразовать NSString в double с помощью
double myDouble = [myString doubleValue];округление до ближайшего int может быть сделано как
int myInt = (int)(myDouble + (myDouble>0 ? 0.5 : -0.5))Я честно не уверен, что есть более упрощенный способ преобразования обратно в строку, чем
NSString* myNewString = [NSString stringWithFormat:@"%d", myInt];
чтобы действительно преобразовать из строки в число правильно, вы должны использовать экземпляр
NSNumberFormatterнастроено для языкового стандарта, из которого Вы читаете строку.разные локали будут форматировать числа по-разному. Например, в некоторых частях света,
COMMAиспользуется в качестве десятичного разделителя, в то время как в других этоPERIOD- и разделитель тысяч (при использовании) сторнируется. За исключением тех случаев, когда это пространство. Или вообще не присутствует.это действительно зависит от происхождения входных данных. Самое безопасное, что нужно сделать, это настроить
NSNumberFormatterдля того, как ваш вход отформатирован и использовать-[NSFormatter numberFromString:]для полученияNSNumberот него. Если вы хотите обрабатывать ошибки преобразования, вы можете использовать .
добавление к ответу Олли, вы можете конвертировать из int обратно в строку с
NSNumber' sstringValue:[[NSNumber numberWithInt:myInt] stringValue]
stringValueнаNSNumberвызываетdescriptionWithLocale:nil, давая вам локализованное строковое представление значения. Я не уверен, если[NSString stringWithFormat:@"%d",myInt]даст вам правильно локализованное повторениеmyInt.
olliej это округления метод неверен для отрицательных чисел
- 2.4 округляется 2 (Метод Олли получает это право)
- -2.4 округляется -2 (метод Олли возвращает -1)
вот альтернатива
int myInt = (int)(myDouble + (myDouble>0 ? 0.5 : -0.5))вы можете, конечно, использовать функцию округления из математики.h
вот рабочий образец nsnumberformatter, читающий локализованную числовую строку (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
// 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];
для округления вы, вероятно, должны использовать функции C, определенные в математике.з.
int roundedX = round(x);Удерживайте нажатой кнопку и дважды щелкните на
roundв Xcode и он покажет вам страницу с различными функциями округления различных типов.
для преобразования из числа в строку, как насчет использования нового синтаксиса литералов (XCode >= 4.4), его немного более компактным.
int myInt = (int)round( [@"1.6" floatValue] ); NSString* myString = [@(myInt) description];(коробки его как NSNumber и преобразуется в строку с помощью метод описания NSObjects)
из этого примера здесь вы можете увидеть преобразования в обоих направлениях:
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 в string
myLabel.text=[NSString stringWithFormat:@"%d",myint];или
NSString *mystring=[NSString stringWithFormat:@"%f",mydouble];
Comments