2012-10-23 64 views
0

我有一個NSString包含一個非常大的數字。我需要將它轉換爲NSNumber,但它總是以科學格式返回一個NSNumber,這並不好(我在謂詞中使用數字來搜索具有此MPMediaEntityPropertyPersistentID的音樂曲目)。NSString爲NSNumber爲大數

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

恐怕我問這個問題有點太快了。一旦我發現所討論的數字是一個無符號的長整數,找到答案並不困難。

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

拔出MPMediaEntityPropertyPersistentID我已經存儲在本地SQLITE3 DB時,也有類似的問題。以爲另一個代碼片段可以幫助某人:

// 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];