Bonjour à tous,
je programme en C sur un micro-contrôleur. Mon souci, c'est qu'il n'y a pas de bibliothèque pour afficher des variables via liaison série. Du coup, je suis obligé d'utiliser la fonction sprintf et de mettre ça dans un buffer, puis d'envoyer le buffer via la liaison :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
sprintf(buf, "%d\n\r",ma_variable) ;
UART_1_PutString(buf);
Mon souci, c'est que je voudrais afficher une variable de type double à virgule, sauf que la fonction sprintf fonctionne qu'avec des int. Je me suis dit pas pas problème j'affiche ma variable castée en int puis, ensuite, j'affiche ma variable moins ma variable castée en int pour récupérer l’après virgule, puis je la multiplie par 100:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
double Var;
sprintf(buf, "%d\t%d\n\r",(int)Var,((Var-(int)Var)*100)) ;
UART_1_PutString(buf);
Mais je ne comprends pas : ça ne marche, quand j'ai un nombre négatif j'obtiens deux nombres négatif du style -5,-7
Or, si j'essaye ma technique avec un nombre négatif ça marche :
Exemple:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
Var=-56,78
(abs(-56,78-(-56)))*100
Mais quand je le programme ça ne marche pas ça renvoie 0 :

Mon code, errPitch est un double, et vir c'est mon int qui contient les nombres après la virgule :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
vir=(int)(abs(errPitch-((int)errPitch)))*100;
    sprintf(buf, "%d,%d\n\r",(int)errPitch,vir ) ;
    UART_1_PutString(buf);
Merci les gars.