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 :

Float arrondi à n décimales


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Août 2007
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 64
    Par défaut Float arrondi à n décimales
    Bonjour,
    Je souhaite afficher un variable float avec n décimales en toute circonstance.
    Je connais la fonction round. Elle a le désavantage de couper des éventuels zéros finals:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    round(1.0/10.0,3) -> 0.1 mais je veux 0.100
    J'avais pensé autrefois (cf ancien post) à passer en string et ne conserver que les premières positions, mais là il n'y a plus d'arrondi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    str(pi)[:5] -> 3.141 mais il faut 3.142
    Evidemment quelqu'un me dira qu'en faisant:
    on obtient le bon résulat, mais le problème des zéros ci-dessus demeure:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    str(round(1.0/10.0,0.3))[:5] -> 0.1 et pas 0.100
    Quelqu'un a-t-il une idée? J'aimerais éviter quand même un truc du style:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    while len(str(a))<6:
    str(a)+='0'
    qui est bien torcheculatif...
    Merci.

  2. #2
    Membre confirmé Avatar de moumine
    Profil pro
    Étudiant
    Inscrit en
    Août 2008
    Messages
    237
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2008
    Messages : 237
    Par défaut
    Salut,

    Ce que j'utlilse:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    x = int(x*1000)
    x = (float(x))/1000
    Voila, c'est ma façon de faire, je sais bien que c'est pas précis mais je pense que sa doit pas poser de problème dans ton cas.
    x = la valeur que tu veux simplifier
    1000 = le nombre de chiffre après la virgule (donc 3)

    A+

  3. #3
    Membre confirmé
    Inscrit en
    Août 2007
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 64
    Par défaut
    Je dois être bobet, mais chez moi ça ne marche pas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    >>> a = 10.21
    >>> a = int(a*1000)
    >>> a
    10210
    >>> a = float(a)/1000
    >>> a
    10.210000000000001
    >>> str(a)
    '10.21'
    En tout cas, j'ai toujours un affichage de 10.21 et pas 10.210...

  4. #4
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    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 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Il vaut mieux utiliser les fonctions de formatage avec %:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    print "%.4f" % 3.3333333333
    3.3333
    print "%.4f" % 6.6666666666
    6.6667
    Tyrtamos

    Edit: et, bien sûr:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    print "%.4f" % 0.1
    0.1000

  5. #5
    Membre confirmé
    Inscrit en
    Août 2007
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 64
    Par défaut
    OK lorsqu'il faut utiliser print,. Dans mon cas la valeur est mise dans une variable, d'où l'idée de passer par un string qui conserve les zéros finals.

    ps-ceux qui utilisent des strings sont souvent sur la corde raide!

  6. #6
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    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 486
    Billets dans le blog
    6
    Par défaut
    Ce n'est pas propre à print, ça fabrique du string:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    x="%.4f" % 0.1
     
    print type(x)
    <type 'str'>
     
    print x
    0.1000
    Tyrtamos

  7. #7
    Membre confirmé Avatar de moumine
    Profil pro
    Étudiant
    Inscrit en
    Août 2008
    Messages
    237
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2008
    Messages : 237
    Par défaut
    Salut,

    Je sais pas ce qui ce passe, normalement sa devrait fonctionner.
    Mais le plus bizzare c'est que tu obtient:
    alors que tu es censé avoir:
    es-tu sur d'avoir fait sa :

    moi j'ai plutot l'impression que tu as fait sa:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    a = float((a)/1000) #les parenthése orange son théorique pour expliquer ce que l'intérpréteur a fait (enfin c'est ce que je pense)
    A+

  8. #8
    Membre confirmé
    Inscrit en
    Août 2007
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 64
    Par défaut
    Et ben voilà, c'est exactement ce que je cherchais!
    Merci beaucoup.

  9. #9
    Membre Expert
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Par défaut Perso je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    x = str(a) +(6-len(str(a))*'0'

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

Discussions similaires

  1. Arrondi à 1 décimale
    Par Arkoze dans le forum Langage
    Réponses: 3
    Dernier message: 03/10/2011, 22h54
  2. affichage d'un float avec ses décimales
    Par wonderwhy dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 28/12/2010, 18h44
  3. pb - résultat de type double/float arrondi
    Par Ayana dans le forum Langage
    Réponses: 38
    Dernier message: 23/10/2007, 20h05
  4. Réponses: 2
    Dernier message: 07/07/2006, 19h59
  5. float arrondi depuis un fichier
    Par anasama dans le forum C++
    Réponses: 6
    Dernier message: 24/01/2006, 17h23

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