joh*_* cs 5 objective-c nsnumberformatter ios
我无法可靠地将更长时间转换NSString为NSNumber.具体来说,我将MPMediaEntityPropertyPersistentID字符串转换为NSNumber 有时它有效,通常不会.
转换代码:
NSString *keke = [jsonArray objectForKey:@"next"];
NSNumberFormatter * f = [[NSNumberFormatter alloc] init];
[f setNumberStyle:NSNumberFormatterDecimalStyle];
NSNumber *persistentIDasNumber = [f numberFromString:keke];
Run Code Online (Sandbox Code Playgroud)
以下是成功进行数字转换的示例:
String: 3813955856659208324
Number: 3813955856659208324
Run Code Online (Sandbox Code Playgroud)
这是一个不成功的转换:
String: 12790162104953153719
Number:1.279016210495315e+19
Run Code Online (Sandbox Code Playgroud)
它很接近,但最后发生了什么?它太大了吗?
显然,可以使用NSNumberFormatter处理的最大整数是很长的,即9223372036854775807.除此之外的任何东西都会失去精度,而不会在你输入时出现.
而是使用NSDecimalNumber,NSNumber的具体子类.它甚至可以自己解析字符串:
NSDecimalNumber *dn=[[NSDecimalNumber alloc]initWithString:@"12790162104953153719"];
NSLog(@"dn: %@",dn);
Run Code Online (Sandbox Code Playgroud)
NSDecimalNumber在丢失精度之前最多可以处理38位长的十进制数.