quand on se demande come quelque chose fonctionne, le premier réflexe c'est d'aller consulter la la doc de la fonction — ici print()
ils disent
An optional second parameter specifies the base (format) to use; permitted values are BIN(binary, or base 2), OCT(octal, or base 8), DEC(decimal, or base 10), HEX(hexadecimal, or base 16). For floating point numbers, this parameter specifies the number of decimal places to use. For example-
Serial.print(78, BIN) gives "1001110"
Serial.print(78, OCT) gives "116"
Serial.print(78, DEC) gives "78"
Serial.print(78, HEX) gives "4E"
Serial.print(1.23456, 0) gives "1"
Serial.print(1.23456, 2) gives "1.23"
Serial.print(1.23456, 4) gives "1.2346"
les bibliothèques pour LCD supportent aussi la classe Print donc vous pourrez utiliser la même approche
"La moindre des choses ..." Ok je l'ai fait , sauf que j'ai d'une part mal compris, mais surtout que ça ne semble pas répondre ( ou je n'ai pas saisis la subtilité a un de mes 2 problèmes.
Ok pour les 3 chiffres après la virgule .
Mais je n'ai que des zéros après la virgule quand la valeur est issue d'un calcul
Elle est bien déclarée en float comme l'a écrit jpbbricole, et son exemple ou la valeur est définie , fonctionne aussi ici.
Mais ensuite. Cette valeur est calculée par une division par 1000 d'une autre valeurs entière ( fréquence = fréquence / 1000 )
Par ex 27275 / 1000 qui devrait donner 27.275, ça donne 27.000 via serialprint .
Tout est possible, bien qu'il indique que c'est un float, sans code malheureusement difficile d'être sûr de son problème dans la multitude des possibilités.
Si fréquence était un int alors la division par un float se ferait bien en float mais le résultat serait à nouveau tronqué pour retourner dans un int et donc le print ne fonctionnera pas. Hors il nous dit que ça marche maintenant.
De plus pour un int la fonction print n’accepte pas de nombre après la virgule. Le second paramètre dans ce cas est la base d’affichage
Il y a autre chose donc mais sans le code difficile de dire ce que c’est et difficile donc de permettre à @Toby64 de comprendre exactement ce qu’il avait sous estimé et d’apprendre ainsi de ses erreurs.
(À mon avis il avait deux variables et pas qu’une seule. La première était un int et la seconde un float mais il faisait la division avec le int)
frequence de départ 27.275 en anglosaxon çà équivaut a 27,275 en européen ?
la réponse devrait etre 0.027275 ? Serial.print (frequence); tronque les décimales à 2 par défaut et arrondi
çà dépend des réglages préférences arduino IDE ou du systeme OS ?
çà m'énervait sur mon pc win11 : la calculatrice était en "européen, me mettait un point pour les miliers et une virgule pour les décimales, jamais eu le cas de win95 à win7, en anglosaxon par défaut
float freq = 27.2755;
void setup() {
Serial.begin(115200);
freq = freq/1000;
Serial.print (freq);
}
void loop() {
// put your main code here, to run repeatedly:
}
De votre code… la fonction print, quand on lui passe un float ou un double, prend un argument supplémentaire qui est le nombre de chiffres après la virgule. Si vous ne fournissez pas ce paramètre, il vaut 2 par défaut. C’est documenté…
Arduino ne gère pas la localisation des nombres et met un point décimal au lieu de la virgule chez nous. C’est donc le texte envoyé sur le flux sortant qui comporte le point, l’affichage se borne à retranscrire ce qu’il reçoit..
Les OS des ordinateurs et fonctions associées à la localisation savent par contre prendre cela en compte pour les programmes bien écrits.