簡體   English   中英

NSString轉換為NSNumber

[英]NSString to NSNumber convert

我嘗試轉換一個字符串:

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

所以我失去了原來的數值

如果要讓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的最大范圍是04294967295

因此,使用NSNumberFormatter是獲取正確值的最安全方法,因為它可以為您找到正確的數據類型:

NSString *tmpId = @"3033547640189791162";
NSNumberFormatter * f = [[NSNumberFormatter alloc] init];
[f setNumberStyle:NSNumberFormatterDecimalStyle];
NSNumber *myNumber = [f numberFromString:tmpId];

移動我的評論以回答:

嘗試NSNumber * myNumber = [NSNumber numberWithLongLong:[tmpId longLongValue]];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM