[c/c++]précision des nombre avec virgule

Résolu/Fermé
triblekano Messages postés 169 Date d'inscription vendredi 13 juin 2008 Statut Membre Dernière intervention 2 juin 2016 - 19 juil. 2012 à 13:02
loupius Messages postés 697 Date d'inscription dimanche 1 novembre 2009 Statut Membre Dernière intervention 31 décembre 2017 - 20 juil. 2012 à 00:40
Bonjour,
je développe un logiciel de géolocalisation je manipule la longitude et la latitude donc je dois y avoir des valeurs précise par exemple "35.125478" 6 chiffre a prés la virgule mais malheureusement j'ai que quatre valeur "35.1254" sachant que "35.125478" et "35.125400" il sont très distant dans la carte (google map). je veux savoir si il existe un type ou une fonction qui permet la représentation exacte.
ps: j'ai pas besoin de l'affichage exacte mais la valeur stocké sera exacte car j'ai trouver une fonction "setPrecision(6)" qui marche avec cout elle affiche la valeur exact mais que pour l'affichage mais moi je dois les enregistré dans une basse de donné et pas les afficher .
cordialement.


4 réponses

Symeon94 Messages postés 138 Date d'inscription vendredi 2 janvier 2009 Statut Membre Dernière intervention 20 juillet 2012 2
19 juil. 2012 à 13:07
Utilise plusieurs variables Une les degrés °, une autre les minutes ' et enfin les secondes "

La precision des variables est un probleme causé par le language binaire dans lequel elles sont représenté donc je ne pense pas que tu puisse (à part utiliser des double si tu utilisais des float) être plus precis.
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
19 juil. 2012 à 13:58
même avis de Symeon, tu peux séparé en degré minutes seconde, ou jouer sur le type de flottant.
float, double ou long double. float est en général sur 32 bits, double sur 64 bits (précision à environ 13 chiffres). Pour long double, c'est plus compliqué, il faut souvent faire appel à des options du compilateur, n'est pas très standard ni très portable. Il y a plusieurs codages, sur 80 ou 128 bits.
0
triblekano Messages postés 169 Date d'inscription vendredi 13 juin 2008 Statut Membre Dernière intervention 2 juin 2016 7
19 juil. 2012 à 14:31
merci pour vos réponse j'ai réglé le probleme vu que j'utilise le framework qt il existe une fonction
QString QString::number ( double n, char format = 'g', int precision = 6 ) [static]
par exemple :
double x=23.214558789
s=QString::number (x) // s="23.2145"
s=QString::number (x, 'g',11 )//s="23.214558789"
car par default elle affiche que 6 chiffre mais on poura le modifier pour quelle affiche le nombre de chiffre voulu et le parametre du milieu je les pas bien comprie mais je pense c'est pour la forme du nombre genre (23e-9) mais je suis pas sur mais 'g' c'est la valeur par default donc je les laisser et je pense que le nombre et toujours bien représenté dans la mémoire mais il y a que l'affichage qui n'est pas correct.
merci encore pour vos réponse.
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
20 juil. 2012 à 00:02
0
loupius Messages postés 697 Date d'inscription dimanche 1 novembre 2009 Statut Membre Dernière intervention 31 décembre 2017 148
20 juil. 2012 à 00:40
Un autre moyen de procéder, afin d'être certain de conserver la précision, est d'utiliser des 'long int' qui te donneront toujours au moins 9 chiffres significatifs; évidemment il faudra multiplier, dans ton exemple, par 1 000 000 puis récupérer par une division et un modulo.
Ceci n'est qu'une suggestion parmi tant d'autres.
Bonne continuation.
0