--- rpl/src/formateur.c 2010/01/29 16:49:23 1.3 +++ rpl/src/formateur.c 2010/02/08 19:26:32 1.4 @@ -3435,6 +3435,7 @@ formateur_reel(struct_processus *s_etat_ logical1 i50; long correction; + long dernier_chiffre_significatif; long exposant; long longueur_utile; long longueur_utile_limite; @@ -3567,9 +3568,42 @@ formateur_reel(struct_processus *s_etat_ } } + // Test portant sur le nombre de chiffres significatifs dans + // le cas du format STD pour que 1.2E-15 apparaisse en notation + // SCI car il y a une perte de précision dans l'affichage. + + if ((strcmp(mode, "STD") == 0) && (type == 'R')) + { + if (abs(*((real8 *) valeur_numerique)) < 1) + { + dernier_chiffre_significatif = -exposant; + sprintf(tampon, ".%f", mantisse); + + ptr = &(tampon[strlen(tampon) - 1]); + + while((*ptr) != '.') + { + if ((*ptr) != '0') + { + dernier_chiffre_significatif++; + } + + ptr--; + } + } + else + { + dernier_chiffre_significatif = 0; + } + } + else + { + dernier_chiffre_significatif = 0; + } + if ((strcmp(mode, "SCI") == 0) || ((strcmp(mode, "STD") == 0) && ((exposant > - longueur_utile_limite) || + longueur_utile_limite) || (dernier_chiffre_significatif > 15) || (exposant < -longueur_utile_limite))) || ((strcmp(mode, "FIX") == 0) && ((exposant >= longueur_utile_limite) || @@ -3682,6 +3716,7 @@ formateur_reel(struct_processus *s_etat_ } } } + strcpy(chaine, tampon); }