5

我无法可靠地将更长的时间转换NSStringNSNumber. 具体来说,我将MPMediaEntityPropertyPersistentID作为字符串转换为 aNSNumber 有时它可以工作,通常它不会。

转换代码:

 NSString *keke = [jsonArray objectForKey:@"next"];
 NSNumberFormatter * f = [[NSNumberFormatter alloc] init];
 [f setNumberStyle:NSNumberFormatterDecimalStyle];
 NSNumber *persistentIDasNumber = [f numberFromString:keke];

这是一个成功的字符串到数字转换的示例:

String: 3813955856659208324
Number: 3813955856659208324

这是一个不成功的转换:

String: 12790162104953153719 
Number:1.279016210495315e+19

它很接近,但最后会发生什么?是不是太大了?

4

2 回答 2

8

显然,可以使用 NSNumberFormatter 处理的最大整数是 long long,即 9223372036854775807。超出此范围的任何内容都会失去精度,并且不会在您输入时出现。

而是使用 NSDecimalNumber,一个 NSNumber 的具体子类。它甚至可以自己解析字符串:

NSDecimalNumber *dn=[[NSDecimalNumber alloc]initWithString:@"12790162104953153719"];
NSLog(@"dn: %@",dn);

NSDecimalNumber 在失去精度之前最多可以处理 38 位长十进制数。

于 2013-09-01T03:27:36.243 回答
3

这就是你的做法:

unsigned long long number = [[jsonArray objectForKey:@"next"] longLongValue];
    NSNumber * numberValue = [NSNumber numberWithUnsignedLongLong:number];
于 2013-09-01T03:03:25.787 回答