Go Down

Topic: Arrondir la valeur d'un Float (Read 4647 times) previous topic - next topic

Rigolo

Bonjour,
je cherche un fonction pour arrondir un float pour l'afficher. Par exemple une pression 1013,56 donnerait 1013,6. Quelle fonction peut faire çà. Comment n'afficher qu'un seul chiffre après la virgule?
merci

kamill

Bonjour,

Ce n'est pas clair. Tu veux arrondir le float ou l'afficher avec une virgule?

Rigolo

L'arrondir au 1/10 et ensuite l'afficher correctement (sur un LCD par exemple).

kamill

#3
Apr 15, 2016, 10:48 am Last Edit: Apr 15, 2016, 10:49 am by kamill
Sur un lcd (et d'ailleurs en général) tu n'as pas besoin de l'arrondir, il suffit de préciser le nombre de décimales.
Code: [Select]
float val=1013.56;
lcd.print(val,1);

Rigolo

Effectivement, tout simplement, merci!

superninja

Bonjour,

Ce n'est pas clair. Tu veux arrondir le float ou l'afficher avec une virgule?
Bonjour, j'aimerais faire la meme chose : arrondir un float mais pour faire des calculs par la suite :

ex:  22.19 -> 22.2     comment faire ?

Merci

kamill

#6
Nov 07, 2017, 07:33 pm Last Edit: Nov 07, 2017, 07:46 pm by kamill
Bonjour,

Tu multiplies pas 10, tu arrondis à l'unité la plus proche et tu divises par 10
Code: [Select]
  float f=22.19;
  f=floor(10*f+0.5)/10;


Attention cependant avec les flottants, une représentation décimale avec un nombre fini de chiffres ne veut pas dire que la représentation interne en binaire a aussi un nombre fini de bits (donc la valeur interne n'est pas toujours "juste" par rapport à la représentation décimale).

Pour s'en convaincre il suffit de faire Serial.println(22.2, 7), ça donne 22.2000007

superninja

impecc l'astuce de floor !

Pour détailler mon projet : c'est un thermometre a affichage LCD qui affiche les valeurs Mini et maxi.
 Le capteur est un 18B20 . Je prefere  garder la précision du capteur mais ne prendre qu'un chiffre apres la virgule pour plus de lisibilité sur l'afficheur.

Dans le but de rafraichir la mesure QUE si la temperature change : c'est idiot de rafraichir la valeur si la temp passe de 21.23 à 21.19 !

voila ce que ca donne en piece attachée.

J-M-L

bof... La précision analogique du capteur est de plus ou moins 0,5°C entre -10°C et +85°C donc afficher un chiffre après la virgule n'est pas pertinent...

Hello - Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums.
Bonjour Pas de messages privés SVP, postez dans le forum directement pour que ça profite à tous

superninja

oui , c'est sur !

Quel capteur tu propose , tout en restant simple au niveau soft/hard ?

J-M-L

#10
Nov 08, 2017, 01:03 pm Last Edit: Nov 08, 2017, 01:10 pm by J-M-L
c'est pas la bonne question :)

la question c'est de quelle Exactitude, précision, résolution, reproductibilité avez vous vraiment besoin pour votre projet ? est-ce utile de savoir qu'il fait 22.3°C ou 22°C simplement ? (sachant que la T° est rarement homogène dans un milieu)

un MCP9808 (en I2C) fait mieux généralement qu'un 18B20 (accuracy ±0.25°C sur la zone -40°C à +125°C et résolution de 0.0625°C)

J'ai retrouvé un article en anglais sur le sujet
Hello - Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums.
Bonjour Pas de messages privés SVP, postez dans le forum directement pour que ça profite à tous

superninja

Effectivement , sans faire de test labo, afficher 22° plutot que 22.3° (avec un capteur de 0.5 de precision) serait plutot judicieux MAIS ça fait quand meme plus simpa sur un ecran LCD  :D

kamill

Afficher une décimale, même si elle n'est pas forcément garantie permet de voir si la température a tendance à monter ou à descendre.

J-M-L

Afficher une décimale, même si elle n'est pas forcément garantie permet de voir si la température a tendance à monter ou à descendre.
si la décimale est significative, oui....
Hello - Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums.
Bonjour Pas de messages privés SVP, postez dans le forum directement pour que ça profite à tous

ChPr

... - en n'affichant que la valeur entière 12°C, la mesure pourrait être comprise entre 11,5°C et 12,5°C avant arrondi, correspondant à une température comprise entre 11,0°C et 13,0°C, soit pour l'utilisateur une incertitude de 2,0°C ; ...
L'arrondi de 12.5 est 12 et non 13  ;) mais ça ne fait rien, l'incertitude est bien de 2 °C.

Cordialement.

Pierre
Pourquoi faire simple alors qu'il est si facile de faire compliqué !

Go Up