1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| int len_real(double reel_d)
{
int len = 0, intp; // decp: partie entière
double floatp; // partie flottante
floatp = reel_d - (int)reel_d; // calcule la partie flottante
// on calcule la partie entière (ici ça marche)
decp = (int)(reel_d - floatp);
// Longueur de floatp
while(floatp != 0.0)
{
floatp *= 10; // exemple: 0.98765 devient 9.8765
floatp -= (int)floatp; // exemple: 9.8765 devient 0.8765
len++;
}
/* après on remarque que la boucle n'a pas bien marché,
quand elle arrive à la phase où floatp == 5.0, la deuxième ligne donne un
comportement bizarre, (int)floatp nous renvoie 4 à la place de 5 (la partie entière de 5.0)
*/
/* Jusqu'ici len contiendra le nombre de caractères qui representent la partie flottante*/
len += len_int(intp);
/* on ajoute le nombre de caractères de la partie entière avec la fonction len_int(int entier) que j'ai déjà déclaré*/
len++; // et enfin on ajoute 1 pour la virgule
return len;
} |
Partager