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 :

Nombre de décimal avec un printf %f


Sujet :

C

  1. #1
    Membre habitué
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2007
    Messages
    375
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 375
    Points : 154
    Points
    154
    Par défaut Nombre de décimal avec un printf %f
    Bonjour,

    voici une partie de mon code.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        p_operation noeud1 = creeNoeud();
        noeud1->objet = "OK";
        noeud1->montant = 12548.865;
        noeud1->date = time(NULL);
        noeud1->t_d_t = 1;
        noeud1->statut = 1;
     
        printf("%f",noeud1->montant);
    A l'exécution, il m'affiche 12548.865234
    Il n'est pas possible d'afficher uniquement le nombre de chiffre après la virgule ? (sans que le programme en invente ?)
    Merci

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Titi41 Voir le message
    Bonjour,

    voici une partie de mon code.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        p_operation noeud1 = creeNoeud();
        noeud1->objet = "OK";
        noeud1->montant = 12548.865;
        noeud1->date = time(NULL);
        noeud1->t_d_t = 1;
        noeud1->statut = 1;
     
        printf("%f",noeud1->montant);
    A l'exécution, il m'affiche 12548.865234
    Il n'est pas possible d'afficher uniquement le nombre de chiffre après la virgule ? (sans que le programme en invente ?)
    Merci

    C'est à dire ??

    Pas clair..

    Tu veux afficher 6 (nombre de chiffres après la virgule), ou bien contrôler le nombre de chiffres après la virgule à l'affichage ?
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  3. #3
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Voir la spécification du format ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf("%.3f",noeud1->montant);

  4. #4
    Membre habitué
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2007
    Messages
    375
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 375
    Points : 154
    Points
    154
    Par défaut
    j'aimerai afficher le nombre de chiffres exact que comporte mon nombre.
    Dans ce cas, j'aimerai en afficher 3. Mais si j'avais montant = 12.3, j'aimerai voir apparaitre seulement 1 chiffre apres la virgule.
    Est-ce que je suis plus clair ?

  5. #5
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    %g est une approche de reponse. Mais tu devrais d'abord te renseigner un peu plus sur les limitations des flottants.

    http://docs.sun.com/source/806-3568/ncg_goldberg.html
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  6. #6
    Membre habitué
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2007
    Messages
    375
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 375
    Points : 154
    Points
    154
    Par défaut
    le %g n'affiche qu'un chiffre apres la virgule...
    Ce que je demande n'est pas possible ?

  7. #7
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 370
    Points : 23 625
    Points
    23 625
    Par défaut
    Citation Envoyé par Titi41 Voir le message
    le %g n'affiche qu'un chiffre apres la virgule...
    - Il nous manque la déclaration de p_operation.montant. Est-ce un float ? un double ?

    - double résout le problème dans le cas de figure présent, mais pas d'une manière générale.

    - Tes nombres sont codés en binaire en mémoire. Le nombre de « décimales » au sens propre n'a de sens qu'après conversion, et il peut être variable puisqu'il dépend de la représentation en binaire de ta valeur.

    - Certains nombres finis en décimal ne le sont pas en binaire. Exemple :
    1.5d = 1.1b
    1.2d = 1.0011001100110011...b

    - La mantisse d'un float tient sur vingt-trois bits et 12548.865 s'écrit 11000100000100.1101110101 en binaire (donc 24 bits). Ça veut dire que tu ne peux pas avoir une précision au millième près avec des nombres de l'ordre de 10^4 ou supérieurs.

    Ce que je demande n'est pas possible ?
    Si, mais à condition de savoir précisément comment ça marche, et de connaître les limitations. Tu pourras alors concevoir un programme qui en tient compte.

    D'ici là, si tu es sûr de jamais utiliser plus de trois décimales, tu peux demander explicitement à l'afficheur d'arrondir ton nombre binaire à trois décimales en base 10.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf ("%.3g",nombre);
    Si tu as des problèmes avec les nombres à virgule flottante, dis-toi qu'ils sont conçus exactement sur le principe de la notation scientifique, à ceci près que l'exposant est en base 2. Exemple, si tu utilises une précision de deux chiffres après la virgule :

    1,05 x 10^3 = 1050

    Tu pourras coder des nombres d'une grandeur arbitraire mais la précision ne descendra jamais de plus de deux ordres de grandeurs. Dans l'exemple présent, dès que tu atteins 100, tu ne peux déjà plus représenter de nombres à virgule.

  8. #8
    Membre habitué
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2007
    Messages
    375
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 375
    Points : 154
    Points
    154
    Par défaut
    merci beaucoup pour ce cours très clair.
    Si j'avais des profs comme ça, au moins je progresserai !!

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

Discussions similaires

  1. [XL-2007] Passer en nombre sans décimal avec VBA possible ?
    Par Debutant10 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 20/06/2011, 10h49
  2. Réponses: 8
    Dernier message: 18/04/2011, 14h46
  3. Réponses: 3
    Dernier message: 25/06/2008, 10h39
  4. Réponses: 3
    Dernier message: 21/12/2007, 15h13
  5. round avec nombre de décimale spécifiée
    Par bilb0t dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 14/04/2005, 16h44

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