IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

printf nombre a virgule flottante


Sujet :

C

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    50
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 50
    Points : 39
    Points
    39
    Par défaut printf nombre a virgule flottante
    Bonjour,
    J'aimerais pouvoir afficher des nombres de type double avec 3 chiffres apres la virgules si il y en a autant, mais aucun si il n'y en a pas.

    Y a t'il a flag dans printf qui gere ca ?

    Merci d'avance

  2. #2
    Membre averti
    Avatar de Foobar1329
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    283
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 283
    Points : 387
    Points
    387
    Par défaut
    Hello,

    Citation Envoyé par Toutankharton
    Bonjour,
    J'aimerais pouvoir afficher des nombres de type double avec 3 chiffres apres la virgules si il y en a autant, mais aucun si il n'y en a pas.

    Y a t'il a flag dans printf qui gere ca ?

    Merci d'avance
    Oui et non.

    Il y a ce que l'on appelle la précision pour les spécificateurs de format des nombres flottants :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    double gg = 5.64;
    printf("%.3f\n", gg);
    Maintenant, et c'est plus délicat, comment savoir qu'il n'y a pas de partie fractionnelle ou 3 décimales et rien après ? D'après la représentation des nombres flottants, c'est difficile à dire. Une solution bête peut être de faire un affichage plus ou moins complet (différent de la valeur réelle) du nombre flottant dans un tampon temporaire et de compter à rebours tant que l'on rencontre '0'.

    MAIS ATTENTION, il faut choisir une précision raisonnable pour l'affichage "complet", car la précision des flottants fait que 5.687 n'est par exemple pas 5.867, hé oui. Voir l'affichage complet en switchant de sprintf() dans le code ci dessous, qui affiche toutes les décimales du flottant.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    #include <math.h>
    #include <float.h>
    #include <stdio.h>
     
    #define STR_(x) #x
    #define STR(x) STR_(x)
     
    int main(void)
    {
     
      int nbDig;
     
      char buffer[50] = {'\0'}, fmt[50] = {'\0'}, *p = NULL, *q = NULL;
     
      double gg = 5.687;
      double int_part, frac_part;
      frac_part = modf(gg, &int_part);
     
      /* Permet de voir que 5.687 n'est pas vraiment 5.687 */
      /* sprintf(buffer, "%." STR(DECIMAL_DIG) "f", frac_part); */
      /* on prend 8 digits de précision */
      sprintf(buffer, "%.8f", frac_part);
     
      puts(buffer);
     
      p = buffer + strlen(buffer) - 1;  
      q = p;
      while(*p == '0') { --q; --p; }
      while(*p != '.') { --p; }        
     
      nbDig = q-p;
     
      printf("%d\n", nbDig);
     
      sprintf(fmt, "%%.%df", nbDig);
     
      printf(fmt, gg);  
     
      return 0;
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Precision d'un nombre en virgule flottante
    Par hikarinoboss dans le forum C++
    Réponses: 2
    Dernier message: 25/02/2010, 11h20
  2. Représentation d'un nombre en virgule flottante
    Par phyfab dans le forum Mathématiques
    Réponses: 2
    Dernier message: 15/12/2009, 14h10
  3. rendre un nombre de virgule flottante en virgule fixe
    Par mitnick2006 dans le forum Général Java
    Réponses: 3
    Dernier message: 15/08/2008, 21h44
  4. nombre et virgule flottante
    Par malikakika dans le forum C++Builder
    Réponses: 1
    Dernier message: 02/02/2008, 23h31
  5. 50.00 n'est pas un nombre en virgule flottante correct
    Par Merfolk dans le forum C++Builder
    Réponses: 2
    Dernier message: 26/01/2006, 00h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo