Go Down

Topic: question avec sprintf (Read 27 times) previous topic - next topic

hppp

Salut à tous,

Je suis en train de faire un morceaux de code avec un shield GPS.

Je capture la latitude et la longitude et je la stock dans un double et je voudrais les mettres dans un char[]. Je fais donc un sprintf mais il marche pas comme je veux.

J'ai trouvé un bout de code et quand je fais un :

Code: [Select]
Serial.println(lat,7);

Il m'affiche la bonne latitude, j'ai :
Lat:45.5249710

mais quand je fais un

Code: [Select]
sprintf(url,"latitude=%ld;longitude=%ld,", (double)lat, (double)lon);
Serial.println(url);


l'affichage retourné est pas bon, j'ai :

latitude=1110841746;longitude=1082887390

En fait je ne comprendre pas le paramètre "7", on met normalement le format d'affichage?

Merci de votre aide.

XavierMiller

%ld = entier long
si tu veux du virgule flottante, c'est %f ou %g
-> http://en.cppreference.com/w/c/io/fprintf

hppp

j'ai des point d'intérogation à la place. Normal je pense car ce sont des double

_pepe_

Bonsoir

En fait je ne comprendre pas le paramètre "7", on met normalement le format d'affichage?
Le second argument (optionnel) de Serial.print() précise le format d'envoi. Lorsqu'il s'agit d'un chiffre, cela correspond au nombre de chiffres après la virgule pour les nombres à virgule flottante (types float et double).

Ici, l'utilisation de sprintf() n'est pas nécessaire. Tu gagnerais en vitesse, et aussi en place mémoire si tu ne fais pas appel à sprintf() ailleurs dans ton sketch, en écrivant simplement :

Code: [Select]
Serial.print( "latitude=" );
Serial.print( lat, 7 );
Serial.print( ";longitude=" );
Serial.println( lon, 7 );

Go Up