Iphone 正在尝试将long long从字符串保存到NSNumber

Iphone 正在尝试将long long从字符串保存到NSNumber,iphone,ios,nsstring,nsnumber,nsnumberformatter,Iphone,Ios,Nsstring,Nsnumber,Nsnumberformatter,我正在尝试将一个长的数字(作为字符串接收)如“80182916772147201”保存到NSNumber中 NSNumberFormatter * f = [[NSNumberFormatter alloc] init]; [f setNumberStyle:NSNumberFormatterBehaviorDefault]; [item setObject:[f numberFromString:@"80182916772147201"] forKey:@"theID"]; [f relea

我正在尝试将一个长的数字(作为字符串接收)如“80182916772147201”保存到NSNumber中

NSNumberFormatter * f = [[NSNumberFormatter alloc] init];
[f setNumberStyle:NSNumberFormatterBehaviorDefault];

[item setObject:[f numberFromString:@"80182916772147201"] forKey:@"theID"];
[f release];
当我将其注销时,假设字符串为“80182916772147201”,我得到:

NSLog(@"%lld", [[item objectForKey:@"theID"] longLongValue]); 
返回:“80182916772147200”-记下四舍五入的最后一位数字

我做错了什么?你能试试这个吗

NSString *numStr = [NSString stringWithFormat:@"%llu", [myNum unsignedLongLongValue]];
这就做出了一些合理的假设,比如numStr将只包含数字,并且它包含一个“有效的”无符号长值。这种方法的一个缺点是,UTF8String创建的内容实质上相当于[[numStr DATAUSINGENCODE:NSUTF8STRINGENCONDING]字节],或者换句话说,每个调用的自动释放内存为32字节。对于绝大多数用途来说,这都不是问题


关于如何将unsignedLongValue之类的东西添加到NSString中的示例,它既非常快速,又不使用自动释放内存作为副作用,请看我对这个问题的(长)答案的末尾。特别是rklIntValue的示例实现,它只需要简单的修改即可实现unsignedLongValue。

问题在于
NSNumberFormatter
决定将该数字表示为浮点数。要强制它仅使用整数,请执行以下操作:

[f setAllowsFloats:NO];