2012-03-11 80 views
1

我尝试将字符串转换:的NSString NSNumber的转换

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} 

insted的的:

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

编辑

当我尝试使用:

NSString *tmpId = @""3033547640189791162"; 

long i = [tmpId longLongValue]; 

i等于= -1631802438

int i = [tmpId intValue]; 

i等于= 2147483647

,所以我失去了原有的数值

+0

尝试'[NSNumber numberWithLongLong:[tmpId longLongValue]];' – Nekto 2012-03-11 10:15:15

+1

为什么不使用[NSNumber numberWithInt:]和[NSString intValue:]?据我所知,你期望一个没有分数的整数值...或者你想控制点后的数字位数? – giorashc 2012-03-11 10:16:58

+0

我编辑我的帖子后,我尝试了你写的 – MTA 2012-03-11 10:36:25

回答

1

移动我的评论回答:

尝试NSNumber * myNumber = [NSNumber numberWithLongLong:[tmpId longLongValue]];

5

如果你希望你的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]; 
+0

我在编辑我的帖子后,我尝试了你写的 – MTA 2012-03-11 10:36:58

+0

@MTA检查我的编辑:) – dom 2012-03-11 11:02:20