Afficher un long en insérant un ou deux points...

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.