Peut on créer une autre variable longitude ou modifier l'existante pour qu'il ne soit pas nécessaire de mettre le ",6" mais tout en gardant cette précision. ça me faciliterait beaucoup les choses pour la suite du programme.
Le 6 que tu utilises ici n'a rien à voir avec la précision de la donnée telle qu'elle est stockée en mémoire, c'est le nombre de décimales que tu vas afficher sur la console.
Si ton nombre est déclaré comme un float, sa précision est de 6 à 7 chiffres, mais ce ne sont pas 6 à 7 chiffres après la virgule. C'est la précision de la représentation de la valeur stockée en mémoire.
Si ta valeur est égale à 1, tu pourras avoir entre 0.999999 et 1.000001
Par contre si tu as le nombre 123456789, tu peux te retrouver avec par exemple 123456888. C'est du moins ce que je comprends de la représentation des float par un arduino.
Si tu veux faire des calculs sur des grands nombres en conservant une précision bien meilleure, il existe une bibliothèque pour ça, elle s'appelle bignumber
lesept:
Le 6 que tu utilises ici n'a rien à voir avec la précision de la donnée telle qu'elle est stockée en mémoire, c'est le nombre de décimales que tu vas afficher sur la console.
Si ton nombre est déclaré comme un float, sa précision est de 6 à 7 chiffres, mais ce ne sont pas 6 à 7 chiffres après la virgule. C'est la précision de la représentation de la valeur stockée en mémoire.
Si ta valeur est égale à 1, tu pourras avoir entre 0.999999 et 1.000001
Par contre si tu as le nombre 123456789, tu peux te retrouver avec par exemple 123456888. C'est du moins ce que je comprends de la représentation des float par un arduino.
Si tu veux faire des calculs sur des grands nombres en conservant une précision bien meilleure, il existe une bibliothèque pour ça, elle s'appelle bignumber
Oui, c'est bien déclaré en float, si j'enlève le ",6" je n'ai plus que deux chiffres après la virgule.
Si je ne met pas ce",6" la variable a t-elle encore sa précision et c'est juste que ça ne l'affiche pas ?
Je dois travailler avec le 6ème et 7ème caractère, si ils n'existent pas, c'est embêtant.
ah oui, j'ai oublié de modifier, je voulais essayé autre chose, voilà ce que je voudrais faire mais, il faut que ma variable "sim808.GPSdata.lat" soit en string ?
Serial.print("latitude :");
Serial.println(sim808.GPSdata.lat,6); //sim808.GPSdata.lat est en float
char caractere6 = sim808.GPSdata.lat.charAt(6);
Serial.print("caractere6");
Serial.println(caractere6);
Il semble que la bibliothèque que tu utilises n'est pas connue pour être très précise, lis ce message, il pointe vers une autre bibliothèque avec une précision à 10 chiffres.
lesept:
Non pourquoi utiliser un String ?
Quelle est la précision que tu veux ? Connais tu la précision de la valeur renvoyée par ton GPS ?
Le programme exemple donne une précision de 6 chiffres après la virgule, c'est ce que je voudrais utiliser.
Si j'essai de téléverser le code ci-dessus j'obtiens le message d'erreur suivant :
SIM808_GetGPS:48: error: request for member 'charAt' in 'sim808.DFRobot_SIM808::GPSdata.DFRobot_SIM808::gspdata::lat', which is of non-class type 'float'
char caractere6 = sim808.GPSdata.lat.charAt(6);
^
exit status 1
request for member 'charAt' in 'sim808.DFRobot_SIM808::GPSdata.DFRobot_SIM808::gspdata::lat', which is of non-class type 'float'