Lecture du nombre de caracteres d'un float

Lecture du nombre de caracteres d'un float - C - Programmation

Marsh Posté le 01-03-2006 à 10:11:11    

Bonjour,
 
J'ai vu dans un sujet précédent l'utilisation de sprintf pour lire le nombre de caracteres d'un int. Avec l'exemple suivant:
 
char chaine[100];  
int i;
int nombre;  
i=fonction_quelconque_qui_renvoie_un_int();  
sprintf(chaine, "%d", i);  
nombre=strlen(chaine);
 
Je n'ai pas réussi à appliquer cette fonction pour lire le nombre de caracteres d'un float, en faisant le code suivant:
 
char chaine[100];  
float i;
int nombre;  
i=fonction_quelconque_qui_renvoie_un_float();  
sprintf(chaine, "%f", i);  
nombre=strlen(chaine);
 
Peut-être que c'est normal. Si oui, existe-t-il une fonction qui réalise ceci pour un float?
 
Merci d'avance!
SAndra

Reply

Marsh Posté le 01-03-2006 à 10:11:11   

Reply

Marsh Posté le 01-03-2006 à 10:21:24    

C'est quoi le nombre de caractères d'un float ?
 
le nombre de caractères de 1.5 est-il  
3 (comme dans 1.5)
8 (comme dans 1.500000)
7 (comme dans 1.5e+00)
...
 
???

Reply

Marsh Posté le 01-03-2006 à 10:28:58    

Je voudrais lire le nombre de caracteres d'un float ayant 2 chiffres apres la virgule comme 12.00 ou 4.00 par exemple

Reply

Marsh Posté le 01-03-2006 à 10:30:18    

ça ferait 5 pour 12.00
 et 4 pour 4.00

Reply

Marsh Posté le 01-03-2006 à 11:02:31    

sandra771 a écrit :

Je voudrais lire le nombre de caracteres d'un float ayant 2 chiffres apres la virgule comme 12.00 ou 4.00 par exemple


 
donc en gros ça fait 3 + <nombre de caractères utilisé pour la partie entière de ton nombre> + (éventuellement) signe "-"
 

Code :
  1. #include <stdio.h>
  2. #include <math.h>
  3. int main()
  4. {
  5.   float f;
  6.   int i;
  7.   int n;
  8.   for( f=-11.8 ; f<12 ; ++f )
  9.     {
  10.       n = 3;
  11.       printf( "%10.2f -> ", f );
  12.      
  13.       if( f<0 )
  14. {
  15.   n++; /* le signe "-" */
  16.   i=floor(-f);
  17. }
  18.       else
  19. {
  20.   i=floor(f);
  21. }
  22.      
  23.       do
  24. {
  25.   n++;
  26.   i /= 10;
  27. }while(i!=0);
  28.      
  29.       printf( "%d caractères\n", n );
  30.     }
  31.   return 0;
  32. }


 

    -11.80 -> 6 caractères
    -10.80 -> 6 caractères
     -9.80 -> 5 caractères
     -8.80 -> 5 caractères
     -7.80 -> 5 caractères
     -6.80 -> 5 caractères
     -5.80 -> 5 caractères
     -4.80 -> 5 caractères
     -3.80 -> 5 caractères
     -2.80 -> 5 caractères
     -1.80 -> 5 caractères
     -0.80 -> 5 caractères
      0.20 -> 4 caractères
      1.20 -> 4 caractères
      2.20 -> 4 caractères
      3.20 -> 4 caractères
      4.20 -> 4 caractères
      5.20 -> 4 caractères
      6.20 -> 4 caractères
      7.20 -> 4 caractères
      8.20 -> 4 caractères
      9.20 -> 4 caractères
     10.20 -> 5 caractères
     11.20 -> 5 caractères


Message édité par franceso le 01-03-2006 à 11:03:45
Reply

Marsh Posté le 01-03-2006 à 12:27:15    

Si je comprends bien, il n'existe pas de fonction qui réalise tout ça à la fois.  
Merci pour ton code!!
Sandra

Reply

Marsh Posté le 01-03-2006 à 13:05:57    

sandra771 a écrit :

Je n'ai pas réussi à appliquer cette fonction pour lire le nombre de caracteres d'un float, en faisant le code suivant:


Cette question n'a aucun sens avec un flottant.  

  • La représentation interne d'un flottant est une appproximation
  • La traduction en texte varie en fonction de la précision demandée.

Que cherches-tu à faire exactement ?


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 01-03-2006 à 13:07:07    

sandra771 a écrit :

Je voudrais lire le nombre de caracteres d'un float ayant 2 chiffres apres la virgule comme 12.00 ou 4.00 par exemple


Alors il faut le convertir avec "%.2f" et mesurer la longueur du résultat...
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 01-03-2006 à 13:54:35    

en c99 ca tient en une expression
snprintf(NULL, 0u, "%.2f", value)

Message cité 2 fois
Message édité par skelter le 01-03-2006 à 13:55:17
Reply

Marsh Posté le 01-03-2006 à 14:09:34    

skelter a écrit :

en c99 ca tient en une expression
snprintf(NULL, 0u, "%.2f", value)


Ah, c'est cool ça.
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 01-03-2006 à 14:09:34   

Reply

Marsh Posté le 01-03-2006 à 19:00:16    

skelter a écrit :

en c99 ca tient en une expression
snprintf(NULL, 0u, "%.2f", value)


 
Bien vu !!!
 
Juste une petite question: pourquoi faut-il se placer en norme C99 pour écrire "snprintf(NULL, 0u, "%.2f", value)" ?
Cette expression devrait être valable en C90, non ?

Reply

Marsh Posté le 01-03-2006 à 19:14:23    

franceso a écrit :

pourquoi faut-il se placer en norme C99 pour écrire "snprintf(NULL, 0u, "%.2f", value)" ?
Cette expression devrait être valable en C90, non ?


Pas de snprintf() en C90.


Message édité par Emmanuel Delahaye le 01-03-2006 à 19:14:39

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 01-03-2006 à 19:15:17    

snprintf (comme vsnprintf) ne fais pas partie de c90, c'est standard à partir de c99

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed