[英]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
的最大范圍是0
到4294967295
。
因此,使用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.