2015-08-18 1 views
1

J'essaie d'afficher la valeur d'une latitude et longitude, que j'ai interrogé à partir d'une table SQL. Mon problème est que lorsque la valeur est 0.000000, il sort quelque chose le long de la ligne de 1.04480899798659e-276. J'ai vérifié la valeur de la sortie au-dessus de ces deux lignes de code:Pourquoi ma fonction génère-t-elle une valeur aléatoire, qui ressemble à une adresse mémoire?

latitudeOutput.text = [[NSNumber numberWithDouble:[theGPS latitude]] stringValue]; 
longitudeOutput.text = [[NSNumber numberWithDouble:[theGPS longitude]] stringValue]; 

et il devrait certainement être sortie 0,000000. Est-ce que quelqu'un sait pourquoi cela se produit, et de toute façon je peux le réparer?

---- ---- Ajouté Section

Pourquoi cette instruction if else continuer tout droit jusqu'à la section else, malgré la valeur de la latitude et la longitude étant égale à 0,000000?

if(latitude == @"0.000000" && longitude == @"0.000000"){ 
    latitudeOutput.textColor = [UIColor grayColor]; 
    longitudeOutput.textColor = [UIColor grayColor]; 
    latitudeOutput.text = @"Latitude"; 
    longitudeOutput.text = @"Longitude"; 
} 
else { 
    latitudeOutput.text = latitude; 
    longitudeOutput.text = longitude; 
} 
+1

Voulez-vous afficher la latitude et la longitude sous forme de chaîne? Essayez ceci: 'latitudeOutput.text = [NSString stringWithFormat: @"% f ", [theGPS latitude]];' – Bannings

+2

Pour ce type de comparaison, vous devez utiliser 'isEqualToString:' de sorte que ce soit '[latitude isEqualToString: @" 0.000000 "]' –

Répondre

2

Les adresses de mémoire ont le format 0xdeadbeef.

Votre valeur est une double écrite dans une « variation » de scientfic notation. Il est quelque chose d'extrêmement près de 0,0 (wolfram alpha visualization)

Cela se produit en raison de la façon dont les ordinateurs stockent des valeurs à virgule flottante. Vous pouvez en lire plus here.

Pour résoudre votre problème, je suggérerais de formater la sortie pour inclure seulement autant de chiffres après la virgule que vous avez besoin.

NSString* formattedNumber = [NSString stringWithFormat:@"%.02f", [theGPS latitude]]; 

Cela vous donnera 2 places après le point décimal.

+0

Cela a fonctionné! Y a-t-il une chance que vous puissiez me dire maintenant pourquoi cette affirmation else else se trouve directement dans la section else? Je l'ai ajouté à la question –