Arrondir un float

Bonjour,

Je vous préviens tout de suite je n'ai pas testé le code ci-dessous, mais comme je suis insipré, j'écris et vous allez me dire svp ce que vous en pensez.

objectif : arrondir un float :
1245.45 =>1245.4

float a=1245.45;
float b=0;
float c=0;
float d =0;
float e=0;
float result=0;

b =int(a); // normalement b=1245.00
c = a-b; // normalement c=0.45
d=c*10; // normalement d=4.5
e = int(d); // normalement e=4
result=b+ (e/10); // normalement 1245.00+0.4 =>1245.4

Bon je vous le concède cest un peu compliqué et je ne sais pas si ca marche.

Si vous avez des remarques ou bien plus simple, je suis preneur

:wink:

Merci

b=(int)(a*10.0) // 12454
result= (float)(b)/10.0

ou en une ligne

result = (float)((int)(a*10.0))/10.0

Dans le principe cela fonctionne mais en pratique les calculs en flottant entrainent des erreurs d'arrondi et le résultats ne tombe pas toujours juste. Typiquement la conversion (float)(b)/10.0 retourne souvent de nouvelles décimales non souhaitées.

Si c'est pour de l'affichage il est préférable de "jouer" avec les paramètres de printf. Pour les calculs c'est un autre problème.

Merci fdufnews !

printf ? ah tiens, comment ca ?

float b=1245.45

pour un affichage sur ecran lcd on pourrait ne faire afficher que 1245.4
avec la commande lcd.printf ?

Merci !

printf est une fonction "standard" du C (dans la librairie stdio) qui gère l'affichage sur la console. Dans la librairie lcd il n'y a que print qui assure un minimum de possibilité. Si tu veux utiliser les possibilités de printf pour de l'affichage vers un écran lcd il faut utiliser la fonction sprintf.
sprintf "écrit" dans une chaine au lieu de vers l'écran.
Exemple

char tampon[25];
float ma_valeur=34567.567;

sprintf(tampon,"la valeur est %f8.2",ma_valeur);
lcd.print(tampon);

Le premier chiffre après le %f indique la taille du champs dans lequel sera placé le flottant.
Le second chiffre indique le nombre de décimales.
Attention a bien dimensionner la tampon pour qu'il puisse stocker le texte + le nombre sinon c'est le plantage assuré.

et surtout (s)printf permet de faire des alignements (en rajoutant des zéros devant les nombres), indispensables sur un LCD quand on fait défiler des valeurs successives.