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 �clair�
    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
    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 confirm�

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    D�tails du profil
    Informations personnelles :
    �ge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    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 ?

  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
    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 �clair�
    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
    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 confirm�

    Inscrit en
    Novembre 2005
    Messages
    5 145
    D�tails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    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

  6. #6
    Membre �clair�
    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
    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
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 495
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 49
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : Chercheur d'emploi
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 495
    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.

    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 �clair�
    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
    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