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, passer automatiquement en notation scientifique si les décimales ne sont pas significatives


Sujet :

C

  1. #1
    Membre émérite Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 023
    Points : 2 273
    Points
    2 273
    Par défaut printf, passer automatiquement en notation scientifique si les décimales ne sont pas significatives
    Bonjour,
    je voudrais afficher des réels avec 4 décimales après la virgule du type 0.0012, 0.0089, etc. mais j'ai aussi des valeurs plus petites du type 0.000022. Pour ces valeurs, afin que la valeur affichée ne soit pas 0.0000, je voudrais les afficher en notation scientifique. Savez-vous si c'est possible de gérer directement les 2 cas en même temps avec des spécificateurs de printf ?
    Pour éviter un truc du type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if(v < 0.0001) {
    printf("%.4f", v)
    }
    else {
    printf("%.4e", v)
    }

    J'ai fait quelques essais notamment avec 'g' mais je n'ai pas bien compris son fonctionnement : http://www.cplusplus.com/reference/cstdio/printf/
    En vous remerciant d'avance.

  2. #2
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Pour un format %.Pg (précision P)
    - Les ("grands")nombres avec un exposant X supérieur ou égal à P sont affichés avec le format %.(P-1)e
    - Les ("petits")nombres avec un exposant X inférieur à -4 sont affichés avec le format %.(P-1)e
    - Les autres sont affichés avec le format %.(p-X-1)f donc, selon leur valeur, avec un format compris entre %.0f et %.(P+3)f

    Autrement dit, si l'exposant du nombre est égal à X
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      X =      P+2        P+1        P        P-1    P-2   P-3  ...    -3        -4         -5         -6 
    format : %.(P-1)e  %.(P-1)e   %.(P-1)e   %.0f   %.1f   %.2f ... %.(P+2)f  %.(P+3)f   %.(P-1)e    %.(P-1)e
    Ceci assure une précision d'affichage de P chiffres significatifs
    Par exemple %.4g (P=4) donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    X       nombre         affichage   format
    5  123456.             1.235e+05  (%.3e)
    4   12345.6            1.235e+04  (%.3e)
    3    1234.56           1235       (%.0f)
    2     123.456          123.5      (%.1f)
    1      12.3456         12.35      (%.2f)
    0       1.23456        1.235      (%.3f)
    -1      0.123456       0.1235     (%.4f)
    -2      0.0123456      0.01235    (%.5f)
    -3      0.00123456     0.001235   (%.6f)
    -4      0.000123456    0.0001235  (%.7f)
    -5      0.0000123456   1.235e-05  (%.3e)

  3. #3
    Membre émérite Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 023
    Points : 2 273
    Points
    2 273
    Par défaut
    Bonjour,
    désolé pour les délais et merci beaucoup, je crois que je comprends mieux et donc 'g' ne pourra pas m'aider dans mon cas. Du coup savez-vous s'il est possible de faire cela avec un seul pattern de spécificateurs ?
    Le but n'est pas d'éviter un if/else mais de proposer une seule et unique préférence à l'utilisateur spécifiant le format des flottants. Si par exemple l'utilisateur entre quelque chose de ce type dans la pref : %07.4f afin d'avoir un affichage du type 00.0025 pour le nombre 0.002528. J'aimerais que cette même pref serve à afficher 5.000e-06 pour le nombre 0.000005 (pour ne pas afficher 00.0000 dans le cas de nombres inférieurs à 0.0001). Pensez-vous que cela soit possible ?
    Sinon je partirai sur plusieurs prefs du type "float", "small float", etc.

Discussions similaires

  1. Réponses: 2
    Dernier message: 14/12/2006, 17h53
  2. Les limites ne sont pas prises en compte
    Par Atamix dans le forum Requêtes
    Réponses: 2
    Dernier message: 09/12/2006, 12h41
  3. [SQL] Les variables ne sont pas UPDATEES
    Par guillaumeIOB dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 29/09/2006, 17h30
  4. Réponses: 1
    Dernier message: 04/12/2005, 18h02
  5. Les Langages ne sont pas tous les mêmes ......
    Par Max Payne dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 28/08/2003, 13h51

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