Bonjour à tous,
J'ai une valeur en long que j'affiche sur un afficheur lcd. Cette valeur est la suivante :
240000000
J'aimerai pouvoir l'afficher de cette façon :
2.400.000.00
Comment dois-je m'y prendre ?
Merci pour votre aide.
Bruno.
Bonjour à tous,
J'ai une valeur en long que j'affiche sur un afficheur lcd. Cette valeur est la suivante :
240000000
J'aimerai pouvoir l'afficher de cette façon :
2.400.000.00
Comment dois-je m'y prendre ?
Merci pour votre aide.
Bruno.
vous le convertissez en chaîne de caractère avec ltoa()
vous fabriquez une nouvelle chaîne de caractère en le lisant de gauche à droite en insérant un point tous les "3 caractères" (sauf au début) et en traitant le cas particulier des nombre négatifs
ça pourrait ressembler à cela:
void convertir(char dst[16], int32_t num, const char separateur = '.')
{
char src[16];
char *p_src = src;
char *p_dst = dst;
uint8_t longeur, virgules;
ltoa(num, src, 10);
longeur = strlen(src);
if (*p_src == '-') { // si négatif
*p_dst++ = *p_src++;
longeur--;
}
for (virgules = 2 - (longeur % 3); (*p_src != '\0'); virgules = (virgules == 2) ? 0 : virgules + 1) {
*p_dst++ = *p_src++;
if (virgules == 1) {
*p_dst++ = separateur;
}
}
*--p_dst = '\0';
}
cette fonction prend en paramètre un buffer de 16 caractères (assez grand pour un int32_t négatif et avec le caractère '\0' de fin), le nombre à convertir et un caractère séparateur (s'il n'est pas fourni ce sera un point)
voici un code d'exemple qui teste différentes valeurs positives et négatives et affichez avec un point et un espace
int32_t valeursTest[] = {240000000, -240000000,
0, 10, 100, 1000, 10000, 100000, 1000000,
-0, -10, -100, -1000, -10000, -100000, -1000000,
+0, +10, +100, +1000, +10000, +100000, +1000000,
-2147483648, 2147483647
};
const uint8_t nbValTest = sizeof(valeursTest) / sizeof(valeursTest[0]);
void convertir(char dst[16], int32_t nombre, const char separateur = '.')
{
char src[16];
char *p_src = src;
char *p_dst = dst;
uint8_t longeur, virgules;
ltoa(nombre, src, 10);
longeur = strlen(src);
if (*p_src == '-') { // si négatif
*p_dst++ = *p_src++;
longeur--;
}
for (virgules = 2 - (longeur % 3); (*p_src != '\0'); virgules = (virgules == 2) ? 0 : virgules + 1) {
*p_dst++ = *p_src++;
if (virgules == 1) {
*p_dst++ = separateur;
}
}
*--p_dst = '\0';
}
void setup()
{
char affichage[16];
Serial.begin(115200);
for (uint8_t i = 0; i < nbValTest; i++) {
Serial.print(F("Je convertis : ")); Serial.print(valeursTest[i]);
convertir(affichage, valeursTest[i]); // séparateur par défaut
Serial.write('\t'); Serial.print(affichage);
convertir(affichage, valeursTest[i], ' '); // séparateur sous forme d'espace
Serial.write('\t'); Serial.println(affichage);
}
}
void loop() {}
le moniteur série (@ 115200 bauds) affichera
[color=purple]
Je convertis : 240000000 240.000.000 240 000 000
Je convertis : -240000000 -240.000.000 -240 000 000
Je convertis : 0 0 0
Je convertis : 10 10 10
Je convertis : 100 100 100
Je convertis : 1000 1.000 1 000
Je convertis : 10000 10.000 10 000
Je convertis : 100000 100.000 100 000
Je convertis : 1000000 1.000.000 1 000 000
Je convertis : 0 0 0
Je convertis : -10 -10 -10
Je convertis : -100 -100 -100
Je convertis : -1000 -1.000 -1 000
Je convertis : -10000 -10.000 -10 000
Je convertis : -100000 -100.000 -100 000
Je convertis : -1000000 -1.000.000 -1 000 000
Je convertis : 0 0 0
Je convertis : 10 10 10
Je convertis : 100 100 100
Je convertis : 1000 1.000 1 000
Je convertis : 10000 10.000 10 000
Je convertis : 100000 100.000 100 000
Je convertis : 1000000 1.000.000 1 000 000
Je convertis : -2147483648 -2.147.483.648 -2 147 483 648
Je convertis : 2147483647 2.147.483.647 2 147 483 647
[/color]
==> notez qu'on ne conservera pas le signe + devant des nombres et que -0 sera vu comme +0 --> juste 0
Bonjour et merci pour votre aide.