Pages: [1]   Go Down
Author Topic: Arrondir un float  (Read 2672 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Full Member
***
Karma: 0
Posts: 207
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

 smiley-wink

Merci
Logged

France
Offline Offline
Faraday Member
**
Karma: 38
Posts: 3534
There is an Arduino for that
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
« Last Edit: December 04, 2009, 07:58:09 am by fdufnews » Logged

0
Offline Offline
Full Member
***
Karma: 0
Posts: 207
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 !
Logged

France
Offline Offline
Faraday Member
**
Karma: 38
Posts: 3534
There is an Arduino for that
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Code:
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é.
« Last Edit: December 05, 2009, 10:47:51 am by fdufnews » Logged

Sophia-Antipolis (06)
Offline Offline
God Member
*****
Karma: 4
Posts: 618
Rejoignez le club !
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Pages: [1]   Go Up
Jump to: