2013-09-01 22 views
5

Non riesco a convertire in modo affidabile più a lungo NSString a NSNumber. Nello specifico, sto convertendo MPMediaEntityPropertyPersistentID come stringa in un NSNumber A volte funziona, di solito no.Conversione lunga NSString a NSNumero

codice di conversione:

NSString *keke = [jsonArray objectForKey:@"next"]; 
NSNumberFormatter * f = [[NSNumberFormatter alloc] init]; 
[f setNumberStyle:NSNumberFormatterDecimalStyle]; 
NSNumber *persistentIDasNumber = [f numberFromString:keke]; 

Ecco un esempio di una stringa di successo alla conversione numero:

String: 3813955856659208324 
Number: 3813955856659208324 

E qui è una conversione senza successo:

String: 12790162104953153719 
Number:1.279016210495315e+19 

E 'vicino, ma cosa sta succedendo alla fine? È troppo grande?

+0

Deve essere NSNumber? o può essere int int o unsigned o float? – CaptJak

+0

Penso che debba essere un 'NSNumber' come la funzione media player lo prende. Tuttavia, se puoi pubblicare conversioni di numeri interi, posso provare quelli nel lettore multimediale. –

+0

bebe da fare int sarebbe 'NSString * string = @" 5 "; int value = [string intValue]; ' – CaptJak

risposta

8

A quanto pare il più grande numero intero che possono essere trattati con NSNumberFormatter è lunga lunga, che è 9223372036854775807. Nulla al di là che perderà la precisione e non uscire come si mette

Utilizzare invece NSDecimalNumber, una sottoclasse concreta di NSNumber. E può anche analizzare le stringhe in sé:

NSDecimalNumber *dn=[[NSDecimalNumber alloc]initWithString:@"12790162104953153719"]; 
NSLog(@"dn: %@",dn); 

NSDecimalNumber in grado di gestire i numeri decimali lungo fino a 38 cifre, prima perde precisione.

3

Ecco come si fa:

unsigned long long number = [[jsonArray objectForKey:@"next"] longLongValue]; 
    NSNumber * numberValue = [NSNumber numberWithUnsignedLongLong:number]; 
+0

Grazie, ma non corrispondente, 'stringa: 15295462469298033064' mi dà' numeroValore: 9223372036854775807' –

+0

Tuttavia sta funzionando in molti altri casi! qualche idea su come espandere la capacità in modo da poter essere sicuro al 100% di quelle istanze in cui la canzone ha un ID più lungo come sopra? –

+0

questo è accaduto perché stai colpendo il limite anche per molto tempo ... quindi hai bisogno del prossimo tipo grande ... Lo sto cercando – Jatin