【问题标题】:NSString to NSNumber for large numbersNSString 到 NSNumber 用于大数字
【发布时间】:2012-10-23 16:05:56
【问题描述】:

我有一个 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 库,则不会返回任何内容。

【问题讨论】:

    标签: nsstring nsnumber nsnumberformatter


    【解决方案1】:

    恐怕我问这个问题有点太快了。一旦我发现有问题的数字是 unsigned long long,找到答案并不难。

    unsigned long long ullvalue = strtoull([str UTF8String], NULL, 0);
    NSNumber *nmb = @(ullvalue);
    

    【讨论】:

      【解决方案2】:

      在提取我存储在本地 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];
      

      【讨论】:

        猜你喜欢
        • 2013-03-22
        • 1970-01-01
        • 2017-01-03
        • 1970-01-01
        • 2021-09-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多