Как конвертировать NSString в NSInteger в приложении для iPhone? - PullRequest
0 голосов
/ 09 марта 2012
NSString * addString=[arrayyyy componentsJoinedByString:@","];

NSLog(@"add string is: %@",addString);// result is: 45,1

Теперь я хочу преобразовать вышеуказанную строку в целое число.

Я пробовал это:

NSInteger myInt=[addString intValue]; 
//NSLog(@"myInt is: %d",myInt);// result is: 45

Ответы [ 3 ]

2 голосов
/ 09 марта 2012

Если вы ожидали 45,1, то есть две неправильные вещи:

  1. 45.1 не является целым числом .Вам нужно будет использовать floatValue, чтобы прочитать значение.

  2. 45,1 (обратите внимание на запятую) не является допустимым числом с плавающей запятой.В то время как 45,1 допустимо в некоторой локали (то есть на французском языке это 1 000,25 вместо 1,000.25), вам придется преобразовать строку с NSNumberFormatter перед чтением floatValue.

.

// Can't compile and verify this right now, so please bear with me.
NSString *str = @"45,1";
NSNumberFormatter *formatter = [[[NSNumberFormatter alloc] init] autorelease];
NSLocale *locale = [[[NSLocale alloc] initWithLocaleIdentifier:@"fr_FR"] autorelease]; // lets say French from France
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
[formatter setLocale:locale];
float value = [[formatter numberFromString:str] floatValue];   // value = 45.1
0 голосов
/ 09 марта 2012

Попробуйте NSExpression, который работает также с математическими символами (например, +, -, /, *):

NSNumber *numberValue = [[NSExpression expressionWithFormat:inputString] expressionValueWithObject:nil context:nil];

// do something with numberValue
0 голосов
/ 09 марта 2012

После прочтения вопроса я думаю, что могу понять, что вы хотите.

Кажется, что отправная точка:

NSLog(@"add string is: %@",addString);// result is: 45,1

И текущая конечная точка:

NSLog(@"myInt is: %d",myInt);// result is: 45

Но похоже, что вы все еще хотите распечатать 45,1

Я предполагаю, что у вас есть массив из 2 строк [@ "45", @ "1"] с именем arrayyyy, и вы хотите распечатать оба значения в виде целых чисел. Если это так, то я думаю, что вы хотите:

NSInteger myInt1 = [[arrayyyy objectAtIndex:0] intValue];
NSInteger myInt2 = [[arrayyyy objectAtIndex:1] intValue];
NSLog(@"add string is: %d,%d",myInt1,myInt2);

Примечание Это ужасно завершится с исключением NSRangeException, если в массиве нет как минимум двух строк. Поэтому, по крайней мере, вы должны сделать:

NSInteger myInt1 = -1;
NSInteger myInt2 = -1;
if ([arrayyyy length] >0) myInt1 = [[arrayyyy objectAtIndex:0] intValue];
if ([arrayyyy length] >1) myInt2 = [[arrayyyy objectAtIndex:1] intValue];
NSLog(@"add string is: %d,%d",myInt1,myInt2);

Но даже это плохо, поскольку предполагается, что защитное значение -1 не будет присутствовать в фактических данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...