我无法将较长的NSString
可靠地转换为NSNumber
。具体来说,我正在将MPMediaEntityPropertyPersistentID
作为字符串转换为NSNumber
。有时它会起作用,通常不会。
转换代码:
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
它很接近但最后发生了什么?它太大了吗?
答案 0 :(得分:8)
显然,可以使用NSNumberFormatter处理的最大整数是很长的,即9223372036854775807。除此之外的任何东西都会失去精确度而不会在你输入时出现。
而是使用NSDecimalNumber,NSNumber的具体子类。它甚至可以自己解析字符串:
NSDecimalNumber *dn=[[NSDecimalNumber alloc]initWithString:@"12790162104953153719"];
NSLog(@"dn: %@",dn);
NSDecimalNumber在丢失精度之前最多可以处理38位长的十进制数。
答案 1 :(得分:3)
您就是这样做的:
unsigned long long number = [[jsonArray objectForKey:@"next"] longLongValue];
NSNumber * numberValue = [NSNumber numberWithUnsignedLongLong:number];