2014-07-16 1 views
1

J'ai une latitude flottante, et je voudrais préciser 6 chiffres pour la partie fractionnaire. Quand jeFlotteur rond à NSNumber obtenu NaN

NSNumber * nLatitude = @(round(latitude*1e6)/1e6); 
NSLog(@"%f %@", latitude, nLatitude); 

Parfois j'ai eu un bon résultat:

48.8282641210 48.828264 

D'autres fois, j'ai obtenu NaN:

48.8281686092 nan 

Quelqu'un a une idée?


Merci pour toutes vos réponses. En effet le NSNumberFormatter résout le problème, j'aimerais trouver toujours l'origine du problème. Arrondir les nombres permet d'économiser des espaces disque et une meilleure lisibilité. C'est pour enregistrer une grande quantité d'emplacements.

Voici quelques détails:

J'ai une trace et je Simuler le changement de position sur simulateur. Les positions sont envoyées par un FakeLocationManager avec un temporisateur. Parfois, les emplacements répétés sont envoyés, les premiers ont fonctionné correctement et ensuite une même position s'est avérée un NaN. Il me semble que la cause pourrait être la minuterie.

+0

Tout comme un commentaire pour les grands nombres comme ça, vous pouvez simplement faire '1e6' au lieu de 1000000 parce que c'est plus facile à lire de cette façon. – Milo

+0

comment voulez-vous dire _other times_? Qu'est-ce qui est différent _autres fois_? quelque chose doit être différent _autres fois_ parce que le code ne fonctionne pas comme une reine-drame ... – holex

+0

Je n'ai pas pu reproduire l'erreur. – Milo

Répondre

3

J'ai rarement eu besoin du nombre de décimales d'une valeur en virgule flottante.

Je soupçonne que la question est l'une de la présentation, auquel cas [NSString stringWithFormat:] peut être utilisé pour spécifier le nombre de décimales de la valeur en virgule flottante:

_myLabel.text = [NSString stringWithFormat:@"%.6f", [nLatitude doubleValue]]; 
//           ^^^^ 
0

utilisent ce [NSString stringwithFormat:@"%.4f",[nLatitude floatValue]];