Tronquer un chiffre à virgule ?

bonjour,

je reçois une température d'un module esp12 qui m'envoie une température avec une precision au centième donc 24.63 par exemple.

Mon problème c'est je souhaite envoyer cette température a ma domotique (Domoticz) qui n'aime pas trop les centaines... lui c'est plutôt les dizaines qu'il préfère !

Donc, après pas mal de recherches infructueuses, quelqu'un pourrait-il me dire comment tronquer 24.63 en 24.6 (l'arrondi je sais faire) pour que je puisse envoyer cette valeur a Domoticz, je ne veux pas faire de print ! je veux pourvoir utiliser mon chiffre tronquer

merci pour votre aide

Bonsoir,

si j'ai bien compris la question :

float f=24.67;

f=(long)(f*10)/10.0;

Après le calcul f vaudra 24.6

oui c'est ca

bon en faite je viens de découvrir que cela venait d'un autre problème

je viens de comprendre ca :

float hic = dht.computeHeatIndex(temperature, humidity, false);
dtostrf(hic, 6, 2, celsiusTemp);
dtostrf(humidity, 6, 2, humidityTemp);

Le 6 donne le nombre de caractere affiché et le 2 le nombre chiffre apres la virgule

pour mon cas le 6 me donne

**24.67 (ou * sont des espaces)

donc ca envoyait des espaces avant le chiffre d'ou l'erreur

j'ai fait ca :

String temp = dtostrf(hic, 4, 2, celsiusTemp);

et la bingo

merci en tout cas pour ton retour rapide

Mieux vaut régler le problème à la source que de rafistoler :wink:

Et s’il fait 3° vous vous retrouvez à nouveau avec un espace...
il faut dans l’appel à votre fonction dtostrf() mettre pour la précision un nombre négatif, ça dit à la fonction de cadrer à gauche au lieu de droite, ce qui fait que votre nombre commence directement dans le buffer ASCII (et des blancs sont rajoutés éventuellement à la fin)

alexbi:
qui m'envoie une température avec une precision au centième

Qui t'envoie une température avec deux chiffres après la virgule.
La précision c'est autre chose.
Si tu as un demi degré de precision c'est dejà pas mal.

Bonjour,

La taille précisée en argument 2 est la taille minimum de la chaine.
Si on ne veut pas d'espace il suffit de mettre 0 et la taille de la chaine sera la taille minimum (mais suffisante) pour écrire le nombre compte tenu de la précision indiquée.

kamill:
Bonjour,

La taille précisée en argument 2 est la taille minimum de la chaine.
Si on ne veut pas d'espace il suffit de mettre 0 et la taille de la chaine sera la taille minimum (mais suffisante) pour écrire le nombre compte tenu de la précision indiquée.

Oui c’est aussi une option, j’ai supposé qu’il voulait les espaces pour un cadrage dans un champs ou LCD (ce qui efface les anciens chiffres). si pas de besoin de ce côté là, effectivement 0 résout le problème

le mieux c'est devité de travailler avec des virgules, c'est plus simple.

PAr exemple pour 23, 56°C...

pour eviter les chiffres a virgule, tu multiplie par 100 ==> soit 2356

Pour 10°C => 1000

pour 3°C => 300

tu peux faire la meme avec ton arduino, aucun soucis, si tu multiplie d'un coté il faut diviser sur ta page web, par 100... pour retrouver la bonne valeur...

hazerty565:
le plus simple c'est de travailler a la source... le mieux c'est devité de travailler avec des virgules, c'est plus simple.

bof ce n'est ni plus simple, ni mieux...

en pratique le chiffre après la virgule des capteurs bas de gamme qu'on trouve couramment n'est pas pertinent, donc souvent je le laisse tomber carrément...