Convertir une chaîne en double pour coordonner l'utilisation, Xcode
J'ai une liste de longitudes et de latitudes dans un fichier XML. Je peux imprimer la lat et lon comme une chaîne de caractères, mais quand je convertir la chaîne en double-je obtenir 0.
Voici mon code:
NSString *latstring = [[NSString alloc] initWithString:theList.lat] ;
NSString *lonstring = [[NSString alloc] initWithString:theList.lon];
NSLog(@"latstring: %@, lonstring: %@", latstring, lonstring);
double latdouble = [latstring doubleValue];
double londouble = [lonstring doubleValue];
NSLog(@"latdouble: %g, londouble: %g", latdouble, londouble);
Lorsque je me connecte 'latstring" et "lonstring" je obtenir les coordonnées correctes cependant lorsque je me connecte 'latdouble" et "londouble" je reçois 0.
J'ai besoin de la lat et lon valeurs en double afin que je puisse les utiliser dans une mapview qu'il ne sera pas me permettre d'utiliser une chaîne de caractères pour les coordonnées.
Il y a probablement une explication très simple pour cela est toutefois je suis assez nouveau à l'objective-c et ne peut pas sembler trouver une solution pour cela.
Toute aide est très appréciée.
- Ce n'
NSLog(@"latstring: %@, lonstring: %@", latstring, lonstring);
de les afficher? - La console affiche: 2012-07-25 12:10:28.720 XMLTest2[4851:707] latstring: 55.035966, lonstring: -1.710799 2012-07-25 12:10:28.721 XMLTest2[4851:707] latdouble: 0, londouble: 0
- La conversion et la mise en forme sont certainement OK. Par exemple,
NSLog(@"lat: %g, lon: %g", [@"55.035966" doubleValue], [@"-1.710799" doubleValue]);
fonctionne très bien (à l'exclusion de l'arrondissement). Essayez de vous connecter à la longueur des chaînes, juste avant la double conversion pour voir si il ya des caractères non-imprimables de causer des ennuis. - Lorsque je me connecte la longueur: NSLog(@"latstring longueur: %i, lonstring longueur: %i", latstring.longueur, lonstring.la longueur); j'obtiens: 'latstring longueur: 10, lonstring longueur: 10'
- Est-ce exact? Je ne peux pas dire s'il est censé être à la tête d'espaces (ce qui devrait être OK) ou d'une autre de caractère supplémentaire.
- Non, je pense qu'il devrait être seulement 9 caractères. Mon fichier xml ressemble à ceci: <Taxi> <nom>Taxis de l'Aéroport</nom> <nombre>01912146969</nombre> <adresse>l'Aéroport International de Newcastle, Woolsington, Newcastle</adresse> <lat>55.035966</lat> <lon>-1.710799<lon> </Taxi> Pourrait le problème de rester ici? J'ai essayé de créer la lat et lon propriétés de "theList" comme double plutôt que de la chaîne, par contre j'ai encore jusqu'à la fin avec zéro quand je les enregistre.
- Il pourrait être le contenu de XML et il pourrait être quelque chose sur la façon dont les valeurs sont mises en
theList
. Il est difficile de dire en regardant ce qui est imprimé; vous pouvez avoir besoin de suivre les données avec le débogueur ou d'examiner les caractères individuels qui sont mis entheList.lat
(par exemple). - Une astuce pour le débogage: Lors de l'impression de sortir des chaînes que vous essayez de vérifier la valeur d'essayer de les emballer dans des marqueurs de sorte que vous êtes sûr que les caractères qui viennent d'eux et qui viennent de le débogueur de texte. par exemple NSLog(@"Coords comme des chaînes de caractères sont (%@,%@)",theList.lat,theList.lon);
Vous devez vous connecter pour publier un commentaire.
Résolu le problème. Après le dépouillement de la longueur des chaînes de caractères comme Phillip dit de le faire, il s'est avéré que la longueur était de 1 caractère de plus de la chaîne. J'ai donc ajouté une autre corde entre-deux qui a la même chaîne que 'latstring" et "lonstring" toutefois, il a commencé à l'indice 1 au lieu de 0, donc couper le caractère que doit avoir été en face de la valeur de coordonnée. Cette puis converti en un double parfaitement.
Voici le code à utiliser:
Merci Phillip Mills et Tobol pour vous aider.
EDIT: Nov 2012
C'était l'espace blanc à l'origine des problèmes et j'ai trouvé un moyen plus sûr de le faire pour ne pas couper nécessaire personnages, comme craig et phillip dit.
Je pense que ces chaînes ne sont pas formateur de bien. il ne peut pas être autre chose que des espaces blancs avant le numéro. La lat et lon doit être dans le format comme 'dd.ddddddd'.