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

Python Discussion :

Format float scientifique


Sujet :

Python

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 26
    Points : 15
    Points
    15
    Par défaut Format float scientifique
    Bonjour,

    J'ai un float qui s'écrit de cette manière : 0.0004
    J'aimerai l'écrire de cette façon : 0.404E-03

    En faisant print '%.3E' % 0.000404 j'arrive à l'écrire : 4.040E-04

    Comment faire pour qu'il commence par 0 ?

    Merci.

  2. #2
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    J'ai bien peur que ce ne soit pas prévu, car la notation scientifique est bien comme '4.040E-04'.

    Par contre, on peut 'bricoler' quelque chose comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    def formatexp(nb):
        # on formate en notation scientifique
        x ='%E' % (nb,)
        # on extrait la 1ère partie: tout ce qui est avant le 'E':
        x1 = x[:x.find('E')]
        # on extrait l'exposant: tout ce qui est après le 'E'
        x2 = x[x.rfind('E')+1:]
        # on reformate l'ensemble en corrigeant les 2 parties, et on le retourne
        return "%.3fE%d" % (float(x1)/10, int(x2)+1)
     
    print formatexp(0.000404)
    0.404E-3
    On peut même mettre le nombre de chiffres après la virgule en argument de la fonction

    Vérifie quand même que ça colle avec toutes tes données: je n'ai pas vérifié tous les cas possibles.


    [edit]: la même fonction plus condensée, avec le nb de chiffres après la virgule en argument:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    def formatexp(nb, cav=3):
        x1, x2 = ('%E' % (nb,)).split('E')
        return ("%." +  "%d" % cav  + "fE%d") % (float(x1)/10, int(x2)+1)
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 26
    Points : 15
    Points
    15
    Par défaut
    Ca marche nickel mais il me manque le 0 devant le 3.
    C'est à dire 0.404E-03.

  4. #4
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    On va supposer que le zéro n'est ajouté que quand l'exposant n'a qu'un seul chiffre. Ex: '-09' mais '-10'.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    def formatexp(nb, cav=3):
        x1, x2 = ('%E' % (nb,)).split('E')
        n = int(x2)+1
        exp =  ['+', '-'][n<0] + ("%d" % (abs(n),)).zfill(2)
        return ("%." +  "%d" % cav  + "fE%s") % (float(x1)/10, exp)
     
    print formatexp(0.000404)
    0.404E-03
    Par ailleurs, un exposant positif sera toujours précédé de '+' mais il est possible d'omettre le '+': il suffit de remplacer la ligne exp=... par:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        exp = ['', '-'][n<0] + ("%d" % (abs(n),)).zfill(2)
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 26
    Points : 15
    Points
    15
    Par défaut
    Merci bien.

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

Discussions similaires

  1. Format nombre scientifique
    Par FlorianBreizh dans le forum Fortran
    Réponses: 4
    Dernier message: 25/11/2010, 11h44
  2. JFormattedTextField de format float
    Par salna dans le forum Général Java
    Réponses: 0
    Dernier message: 18/06/2010, 12h05
  3. Format float probleme
    Par BuzzLeclaire dans le forum Langage
    Réponses: 3
    Dernier message: 27/12/2008, 13h56
  4. format float dans une requête
    Par BYALI dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 25/08/2008, 22h53
  5. [9i SQL Loader] format FLOAT dans le control file
    Par Fiora dans le forum Oracle
    Réponses: 4
    Dernier message: 26/04/2007, 13h49

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