2013-05-10 8 views
16

Ho il seguente doppio valore: 0.000900137869045636 che vorrei convertire in NSString.Objective-C: Converti l'intero valore doppio in stringa senza perdere i dati

ho provato il seguente codice, ma non importa cosa, che arrotonda il valore a questo: 0.000900138

[NSString stringWithFormat:@"%.20lf", [currentLocation coordinate].latitude]; 

Cosa devo fare per mantenere il doppio numero così com'è?

Grazie.

+1

Come si controlla il valore della stringa risultante? –

+4

Non tronca per me, sei sicuro che il tuo doppio contenga quel valore? – dreamlax

+1

Ricorda che l'esecuzione dell'istruzione precedente non modificherà in alcun modo 'latitude' in modo che possa essere successivamente stampato in un formato più ampio. È necessario utilizzare l'output della chiamata 'stringWithFormat'. –

risposta

36

Creare un NSNumber utilizzando

NSNumber *myDoubleNumber = [NSNumber numberWithDouble:myDouble];

Quindi chiamare

[myDoubleNumber stringValue];

+1

+1 anche se preferisco * @ (myDouble) * anziché * [numeroNNumber numeroWithDouble: myDouble] *. –

+3

Questo si basa sulla formattazione interna di 'NSNumber' e non è un ottimo modo per ottenere un output definito con precisione. –

+1

questo non funziona, ottengo '0.0009001378784887493' – bazik

0

Non sembra essere alcun problema con il codice per quanto posso vedere: ho appena provato il seguente e

int main(int argc, const char * argv[]) 
{ 

    double foo = 0.000900137869045636; 
    NSLog([NSString stringWithFormat:@"%.20lf", foo]); 

    return 0; 
} 

l'output di log è:

2013-05-10 14:00:18.492 Test[71101:303] 
0.00090013786904563598 
non

Così sicuro di ciò che il tuo problema è, ma non è nella creazione NSString.

1

Risposta breve: utilizzare %.18lf - testato con 0.000900137869045633 -> 0.000900137869045639. Ma non illuderti, è preciso, funziona solo a causa dell'arrotondamento.

+0

Quindi .18lf e .20lf arrotondano il numero in modo diverso? – thedp

+0

@thedp - Prima il numero che hai ha 18 posizioni decimali, non 20. Quando si formatta un decimale, l'ultima cifra viene arrotondata. Il tuo numero decimale non ha un equivalente binario esatto, ma il binario se arrotondato a 18 cifre decimali corrisponde, arrotondato a 20 non corrisponde. I galleggianti a doppia precisione hanno davvero solo 15-17 cifre di precisione decimale, quindi stai spingendo il limite qui, quindi il mio commento non è preciso - sei fortunato che il tuo numero di 18 cifre sia lo stesso. Se hai bisogno di numeri con questo sguardo di precisione usando NSDecimalNumber, ha fino a 38 cifre di precisione. – CRD