NSString в NSNumber конвертировать - PullRequest
1 голос
/ 11 марта 2012

Я пытаюсь преобразовать строку:

3033547640189791162

с помощью этого метода:

NSNumber * myNumber = [NSNumber numberWithDouble:[tmpId doubleValue]];

и это:

NSNumberFormatter * f = [[NSNumberFormatter alloc] init];
[f setNumberStyle:NSNumberFormatterNoStyle];
NSNumber * myNumber = [f numberFromString:tmpId];
[f release];

и они оба дают мне этот номер:

<CFNumber 0x13a2b0 [0x3f54c9f8]>{value = +3033547640189791232.00000000000000000000, type = kCFNumberFloat64Type}

из:

<CFNumber 0x1b5550 [0x3f54c9f8]>{value = +3033547640189791232, type = kCFNumberSInt64Type}

Редактировать

Когда я пытаюсь использовать:

NSString *tmpId = @""3033547640189791162";

long i = [tmpId longLongValue];

я равен = -1631802438

int i = [tmpId intValue];

я равен = 2147483647

, поэтому я теряю оригинальное значение

Ответы [ 2 ]

5 голосов
/ 11 марта 2012

Если вы хотите, чтобы ваш NSNumber содержал целочисленное значение, вы должны использовать [NSNumber numberWithInt:]:

NSNumber *myNumber = [NSNumber numberWithInt:[tmpId intValue]];

Вам также следует убедиться, что ваша строка NSString содержит допустимое целое значение:

NSScanner* scan = [NSScanner scannerWithString:tmpId]; 
int isInt; 
if ( [scan scanInt:&isInt] && isInt ) {
    NSLog(@"value is an integer: %i",isInt);
}

Но есть одна загвоздка:

NSScanner проверяет число внутри строки как целое число, даже если оно не должно ... Все процессоры ARM являются только 32-разрядными, поэтому максимальный диапазон значений unsigned int составляет от 0 до 4294967295.

Таким образом, использование NSNumberFormatter - это самый безопасный способ получить правильное значение, поскольку он позволяет найти правильный тип данных для вас:

NSString *tmpId = @"3033547640189791162";
NSNumberFormatter * f = [[NSNumberFormatter alloc] init];
[f setNumberStyle:NSNumberFormatterDecimalStyle];
NSNumber *myNumber = [f numberFromString:tmpId];
1 голос
/ 11 марта 2012

Перемещение моего комментария в ответ:

Попробуйте NSNumber * myNumber = [NSNumber numberWithLongLong:[tmpId longLongValue]];

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