我有一个包含非常大数字的NSString。我需要将它转换为NSNumber,但它总是以科学格式返回NSNumber,这不好(我在谓词中使用数字,用这个MPMediaEntityPropertyPersistentID搜索音乐曲目)。
NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
[numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
NSString *str = @"14881035034468747982";
DLog(@"before: %@", str);
NSNumber *nmb = [numberFormatter numberFromString:str];
DLog(@"after: %@", nmb);
打印:
<AppDelegate.m:199> before: 14881035034468747982
<AppDelegate.m:201> after: 1.488103503446875e+19
如果我使用此号码搜索iPod库,则不会返回任何内容。
答案 0 :(得分:0)
我担心这个问题有点太快了。一旦我发现有问题的数字是一个无符号长的长,找到答案就不那么难了。
unsigned long long ullvalue = strtoull([str UTF8String], NULL, 0);
NSNumber *nmb = @(ullvalue);
答案 1 :(得分:0)
在提取我存储在本地 sqLite3 数据库中的 MPMediaEntityPropertyPersistentID 时遇到类似问题。认为另一个代码片段可以帮助某人:
// convert the uniqueId for the track into an NSNumber
NSString *longString = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 11)];
unsigned long long ullvalue = strtoull([longString UTF8String], NULL, 0);
NSNumber *UniqueId = [NSNumber numberWithUnsignedLongLong:ullvalue];