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 :

Affichage de flottants dans la console : je deviens fou


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut Affichage de flottants dans la console : je deviens fou
    Hello,

    Je dois afficher sur la console une série de flottants, en mimant plus ou moins un tableau.

    Disons qu'une "cellule" fasse 10 caractères. Je veux que le point décimal soit toujours affiché sur le caractère 4 (si on va de 0 à 9). Je souhaiter tronquer les décimales qui pourraient dépasser. A gauche de la virgule, je sais que j'aurai toujours assez de place.

    J'ai le nez dans le "The C++ Standard Library", j'essaye de jouer avec setw, setprecision, etc, mais je n'arrive pas à avoir ce que je veux. La logique de cette bibliothèque m'échappe totalement.

    PS : ce post devrait peut-être être déplace dans la section "SL & STL".

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Par défaut
    Oui la doc n'est pas claire pour un novice en la matière. En général, je n'ai réussi à utiliser cette partie qu'en bricolant, en essayant quelques appels et en observants leurs effets. A force, on finit par trouver ce qu'on cherche.

    Note que ça touche aux locales et que les résultats de cette API peuvent dépendre de ta locale.

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut
    J'ai l'impression qu'il est impossible de définir le nombre de chiffres avant et après le séparateur décimal.

    setpricesion() peut avoir deux effets :

    - si on utilise la notation décimale, c'est le nombre total de chiffres
    - si on utlise la notation exponentielle, c'est le nombre de chiffres après le séparateur décimal

    Mais, si on veut définir le nombre de chiffres après le séparateur tout en étant en mode décimal, on peut s'en sortir en rajoutant au flux fixed. Mais dans ce cas là, on se récupère les 0 superflus après le spérateur...

    Je ne sais pas ce qu'ils avaient picolé le jour où ils ont pondu ça, mais ça devait au moins être de l'alcool de patate arrangé aux doryphores.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Pour faire cela, tu as besoin de trois manipulateurs :

    setw(n) qui force la taille totale du champ (10 pour toi) pour la prochaine insertion dans le flux
    par défaut,
    il rajoute des blancs (tu peux customiser cela avec setfill())
    et aligne à droite (mais tu peux utiliser left pour aligner à gauche...)

    setprecision(n) : qui force le nombre de décimales (5 pour toi), c'est indépendant du type de notation, mais cela ne marche que pour les flottants, si tu lui passes des types entiers, il te les imprime sans décimale (c'est normal, un entier ça n'a pas de décimales). Une fois setprecision(5) fixé, tu auras 5 décimales jusqu'à nouvel ordre.

    fixed : qui force l'impression en notation décimale (c'est à dire sans exposant), jusqu'à nouvel ordre, aussi

    donc tu vas faire quelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    double a=1.0,b=sqrt(2.0),c=1.0/3.0;
    // taille 10, six décimales, partie entière
    cout<<setprecision(5)<<fixed;
    cout<<setw(10)<<a;
    cout<<setw(10)<<b;
    cout<<setw(10)<<c;
    cout<<endl;
    Les manipulateurs (les flux en général), c'est un peu étrange au début, mais quand on s'y habitue, c'est carrément pratique... Certaines caractéristiques (par exemple le comportement différent de setw et de setprecision) paraissent étranges au début, mais on s'aperçoit vite que c'est très bien pensé...

    Francois
    Dernière modification par Invité ; 26/10/2011 à 21h32.

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut
    Merci pour ce récapitulatif.

    Si je veux mes séparateurs décimaux alignés, je suis donc obligé d'afficher les zéros non significatifs...

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Par défaut
    Ca oui, ou alors il faut remplir toi même le vide avec des espaces

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

Discussions similaires

  1. Affichage en colonne dans la console
    Par cyberps2 dans le forum Débuter
    Réponses: 6
    Dernier message: 09/05/2009, 19h25
  2. Affichage caractères unicodes dans la console
    Par boss_gama dans le forum C++
    Réponses: 18
    Dernier message: 05/03/2007, 18h27
  3. [log4J] affichage des log4J dans la console (texte bleu)
    Par lalie.perso dans le forum Logging
    Réponses: 1
    Dernier message: 13/04/2006, 13h52
  4. [TOMCAT][LOGS]pas d'affichage de trace dans la console
    Par fabszn dans le forum Tomcat et TomEE
    Réponses: 3
    Dernier message: 23/08/2005, 02h28
  5. Problème a l'affichage dans la console (printf)
    Par PhoneKilleR dans le forum C
    Réponses: 21
    Dernier message: 23/09/2003, 17h21

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