HOWTO · Arduino
Comment arrondir un float à l'entier le plus proche en Arduino
Découvrez comment la fonction round() d'Arduino arrondit les valeurs à virgule flottante à l'entier le plus proche, comment se comportent les valeurs positives et négatives situées exactement à mi-chemin et comment arrondir à un nombre de décimales de votre choix.
Sur cette page
Utilisez la fonction round() d’Arduino pour obtenir l’entier le plus proche d’une valeur float. Les valeurs situées exactement à mi-chemin entre deux entiers sont arrondies en s’éloignant de zéro : 5.5 devient donc 6 et -3.5 devient -4. Vous pouvez stocker le résultat dans un int lorsque vous avez besoin d’une valeur entière.
Ce que fait round() dans Arduino
round() renvoie une valeur à virgule flottante correspondant à l’entier le plus proche. Affecter ce résultat à un int y stocke la valeur entière. Par exemple, round(3.6) produit 4, tandis que round(-2.3) produit -2. La fonction modifie la valeur utilisée dans les calculs suivants ; elle ne change pas la variable d’origine, sauf si vous lui réaffectez le résultat.
Ce programme C++ complet illustre l’arrondi à l’entier et la mise à l’échelle d’une mesure pour obtenir deux décimales. Il utilise la fonction C++ standard round, qui suit la même règle. Dans un programme Arduino, appelez round() et transmettez les valeurs à Serial selon vos besoins. Exécuté tel quel, cet exemple autonome affiche des résultats accompagnés de libellés.
#include <cmath>
#include <cstdio>
int main() {
float positive = 5.5f;
float belowZero = -3.5f;
float measurement = 7.4567f;
int roundedPositive = static_cast<int>(std::round(positive));
int roundedBelowZero = static_cast<int>(std::round(belowZero));
float roundedMeasurement = std::round(measurement * 100.0f) / 100.0f;
std::printf("positive: %d\n", roundedPositive);
std::printf("below zero: %d\n", roundedBelowZero);
std::printf("measurement: %.2f\n", roundedMeasurement);
return 0;
}
Arrondir des valeurs positives et négatives
Pour les valeurs positives, on choisit l’entier le plus proche : les valeurs inférieures au point médian sont arrondies vers le bas, et celles qui l’atteignent ou le dépassent sont arrondies vers le haut. Ainsi, 5.4 devient 5, tandis que 5.5 et 5.6 deviennent 6. Exactement au point médian, le résultat s’éloigne de zéro.
La même règle s’applique aux valeurs négatives. Par exemple, -3.4 devient -3, tandis que -3.5 et -3.6 deviennent -4. Il ne s’agit pas d’un arrondi au pair : les valeurs à mi-chemin ne changent pas de direction pour favoriser un entier pair. Si vous affectez le résultat à un int, choisissez des valeurs d’entrée dont le résultat arrondi reste dans la plage de ce type.
Arrondir à un nombre de décimales choisi
round() arrondit à l’entier le plus proche. Pour arrondir une valeur à un nombre de décimales choisi, multipliez-la par la puissance de dix correspondante, appelez round(), puis divisez le résultat par ce facteur. Pour deux décimales, le facteur est 100 ; par exemple, 7.4567 devient environ 7.46.
Cette méthode de mise à l’échelle convient à de nombreux besoins d’affichage et de calcul, mais les valeurs float sont stockées avec une précision binaire finie. Une valeur décimale peut ne pas être représentée exactement : une valeur proche du point médian peut donc produire un résultat différent de celui d’un calcul décimal idéal. Conservez la valeur d’origine pour les calculs qui exigent davantage de précision, et formatez-la pour l’affichage si vous avez seulement besoin d’un nombre fixe de décimales visibles. La mise à l’échelle ne rend pas non plus la valeur stockée exacte ; elle modifie le résultat arrondi en fonction de la précision disponible.
Utiliser des valeurs arrondies dans un programme Arduino
Dans un programme Arduino, affectez le résultat là où une valeur entière est utile, par exemple pour choisir un indice de tableau ou afficher une mesure sous forme d’entier. Avant l’affectation, vérifiez que la valeur arrondie tient dans la plage de int. Pour l’afficher sur le port série, Serial.println(round(sensorValue)); affiche la valeur arrondie. Le programme complet présenté plus haut est une illustration en C++ exécutée côté hôte ; il n’utilise ni matériel Arduino ni l’objet Arduino Serial.
L’arrondi avant une conversion avec map() est facultatif : map() accepte des arguments entiers. L’arrondi peut donc être utile pour convertir d’abord une mesure à virgule flottante en entier, mais il n’est pas nécessaire dans tous les cas. Consultez la fonction Arduino map() pour en savoir plus sur son comportement avec des entiers.