Как сделать преобразование строк в Objective-C?



Я хочу преобразовать строку в double и после выполнения некоторых математических вычислений, преобразовать ее обратно в строку.



Как это сделать в Objective-C?



есть ли способ округлить двойник до ближайшего целого числа тоже?

534   12  

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 ' s stringValue:

[[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)

Это самый простой способ я знаю:

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 в string

myLabel.text=[NSString stringWithFormat:@"%d",myint];

или

NSString *mystring=[NSString stringWithFormat:@"%f",mydouble];

Я в конечном итоге с помощью этого удобного макроса:

#define STRING(value)               [@(value) stringValue]

Comments

    Ничего не найдено.