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 :

retourner la partie d�cimale d'un float


Sujet :

Python

  1. #1
    Membre confirm�
    Profil pro
    informatique
    Inscrit en
    Novembre 2009
    Messages
    167
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activit� : informatique

    Informations forums :
    Inscription : Novembre 2009
    Messages : 167
    Par d�faut retourner la partie d�cimale d'un float
    Bonjour � tous , je cherche a avoir une m�thode pr�s-d�finie qui me retourne la partie d�cimal.
    merci

  2. #2
    Membre �m�rite

    Homme Profil pro
    Ing�nieur
    Inscrit en
    Ao�t 2010
    Messages
    662
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : Ing�nieur
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Ao�t 2010
    Messages : 662
    Par d�faut
    Salut,

    Tu peux passer par "modulo" comme ceci:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    nb = 2.051
    print nb%1
    >>> 0.051
    Ciao

    Ju

  3. #3
    Expert confirm�
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 100
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activit� : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 100
    Par d�faut
    Il n'y aura pas un probl�me de pr�cision ? Tu as test� Julien N ?

  4. #4
    Membre �m�rite

    Homme Profil pro
    Ing�nieur
    Inscrit en
    Ao�t 2010
    Messages
    662
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : Ing�nieur
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Ao�t 2010
    Messages : 662
    Par d�faut
    Salut Fred1599,

    Oui j'ai test� avant et �a marche bien, du moins avec l'exemple donn�. Mais c'est peut-�tre pas ce que le PO souhaitais.

    Ju

  5. #5
    Expert confirm�
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 100
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activit� : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 100
    Par d�faut
    Python 2.x

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    >>> nb = 2.051
    >>> print nb%1
    0.051
    Python 3.x

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    >>> nb = 2.051
    >>> print(nb%1)
    0.051000000000000156
    En effet en python 2 �a fonctionne mais pas avec la version 3...

  6. #6
    Expert �minent
    Homme Profil pro
    Architecte technique retrait�
    Inscrit en
    Juin 2008
    Messages
    21 771
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activit� : Architecte technique retrait�
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 771
    Par d�faut
    Salut,

    Ce qui change avec Python3 c'est la pr�cision affich�e par "print" mais pas le nombre lui m�me:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ActivePython 2.7.2.5 (ActiveState Software Inc.) based on
    Python 2.7.2 (default, Jun 24 2011, 12:21:10) [MSC v.1500 32
    32
    Type "help", "copyright", "credits" or "license" for more inf
    >>> f = 2.051
    >>> '%.20f' % f
    '2.05100000000000015632'
    >>> f
    2.051
    >>>
    Pour le reste, il n'y a pas de fonction dans la libc qui retourne la partie d�cimale d'un nombre.
    C'est "normal" vu la repr�sentation des "float" plutot orient�s calculs "scientifiques".
    C'est em... lorsqu'on fait de la comptabilit� mais dans ce cas on n'utilise pas des "float" mais plut�t Decimal ou autre.

    Dommage de passer par modulo pour retourner ��: une soustraction serait plus rapide (mais un peu plus compliqu�e car il faut faire attention au signe).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Expert confirm�
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 100
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activit� : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 100
    Par d�faut
    Salut Wiztricks,

    C'est em... lorsqu'on fait de la comptabilit� mais dans ce cas on n'utilise pas des "float" mais plut�t Decimal ou autre.
    �videmment j'avais d�j� test� tout cela et je m'attendais � cette r�ponse

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    >>> from decimal import Decimal
    >>> nb = Decimal(nb)
    >>> nb - int(nb)
    Decimal('0.05100000000000015631940186722')

  8. #8
    Candidat au Club
    Homme Profil pro
    �tudiant
    Inscrit en
    Avril 2014
    Messages
    3
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 3
    Par d�faut
    Ce que tu peux faire c'est ca :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     
    #import math
    ton_nombre=ton_nombre-math.floor(ton_nombre)
    La fonction floor(x) renvoie la partie r�elle de x. Du coup, en soustrayant la partie r�elle tu obtiens la partie d�cimale de ton nombre ! Voila voila !

  9. #9
    Expert confirm�
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 100
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activit� : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 100
    Par d�faut
    Non toujours pas, et celle-ci aussi je l'avais pr�vu

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    >>> nb = 2.051
    >>> n = nb - floor(nb)
    >>> n
    0.051000000000000156

  10. #10
    Expert �minent
    Homme Profil pro
    Architecte technique retrait�
    Inscrit en
    Juin 2008
    Messages
    21 771
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activit� : Architecte technique retrait�
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 771
    Par d�faut
    Citation Envoy� par fred1599 Voir le message
    Non toujours pas, et celle-ci aussi je l'avais pr�vu

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    >>> nb = 2.051
    >>> n = nb - floor(nb)
    >>> n
    0.051000000000000156
    Que cherches-tu a d�montrer?

    Citation Envoy� par YoannDqr
    La fonction floor(x) renvoie la partie r�elle de x. Du coup, en soustrayant la partie r�elle tu obtiens la partie d�cimale de ton nombre ! Voila voila !
    Ouais mais �� ne fait que la moiti� du boulot.
    Pour l'autre moiti�, il faut mettre ceil � contribution.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  11. #11
    Expert confirm�
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 100
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activit� : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 100
    Par d�faut
    Que cherches-tu a d�montrer?
    Que l'impr�cision sur des float, ne permet pas d'avoir la valeur de la partie d�cimale de cette fa�on.

    La seule solution est d'utiliser les cha�nes de caract�res.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    def getDecimal(nb):
        if isinstance(nb, int):
            dec = 0
        elif isinstance(nb, float):
            nb = str(nb)
            ent, dec = nb.split('.')
            dec = '0.' + dec
            dec = float(dec)
        else:
            dec = None
        return dec
     
    values = (5, 2.51, "another")
     
    for val in values:
        print(getDecimal(val))
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    fred1599@fred1599-Aspire-5741G:~$ python3 test.py 
    0
    0.51
    None

  12. #12
    Expert �minent
    Homme Profil pro
    Architecte technique retrait�
    Inscrit en
    Juin 2008
    Messages
    21 771
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activit� : Architecte technique retrait�
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 771
    Par d�faut
    Citation Envoy� par fred1599 Voir le message
    Que l'impr�cision sur des float, ne permet pas d'avoir la valeur de la partie d�cimale de cette fa�on.

    La seule solution est d'utiliser les cha�nes de caract�res.
    Applique ton code au m�me contre-exemple:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    >> def getDecimal(nb):
    ...     if isinstance(nb, int):
    ...         dec = 0
    ...     elif isinstance(nb, float):
    ...         nb = str(nb)
    ...         ent, dec = nb.split('.')
    ...         dec = '0.' + dec
    ...         dec = float(dec)
    ...     else:
    ...         dec = None
    ...     return dec
    ...
    >>> getDecimal(2.51-2)
    0.5099999999999998
    >>>
    Ta "solution" ne fonctionne pas.
    Par contre:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    >>> print ('%.2f' % (2.51 - 2))
    0.51
    >>> print ('%.2f' % (2.51 - 2))
    0.51
    >>> print ('%.3f' % (2.51 - 2))
    0.510
    >>> print ('%.5f' % (2.51 - 2))
    0.51000
    >>> print ('%.23f' % (2.51 - 2))
    0.50999999999999978683718
    >>>
    Autrement dit la diff�rence entre 0.51 et 0.50999999999 est un epsilon qu'il faut de toute fa�on g�rer lorsqu'on s'amuse avec des "float".

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  13. #13
    Expert confirm�
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 100
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activit� : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 100
    Par d�faut
    En effet, il ne doit pas y avoir grand chose � faire, que de se faire une raison...

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    26
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 26
    Par d�faut un b�te script qui fonctionne:
    nb=2.051
    ni=int(abs(nb))
    deci=nb-ni
    print(round(deci, 3))
    print(type(deci))
    deci=str(round(deci,3))
    print(str(deci))
    print(type(deci))
    ...
    0.051
    <class 'float'>
    0.051
    <class 'str'>

  15. #15
    Invit�
    Invit�(e)
    Par d�faut
    Presque 8 ans plus tard !

    Sinon tant qu'� faire en version d�goulasse : float('0.'+str(2.051).split('.')[1])

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    26
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 26
    Par d�faut
    Citation Envoy� par LeNarvalo Voir le message
    Presque 8 ans plus tard !

    Sinon tant qu'� faire en version d�goulasse : float('0.'+str(2.051).split('.')[1])

    Parfaitement pythonesque !

  17. #17
    Invit�
    Invit�(e)
    Par d�faut
    Citation Envoy� par DocGyn Voir le message

    Parfaitement pythonesque !
    Ah ah si tu le dis ^^

    Voici une autre solution dans le m�me genre, mais un peu plus jolie :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    >>> value = 2.051
    >>> v = str(value)
    >>> float(v[v.index('.'):])
    0.051

Discussions similaires

  1. Extraire la partie d�cimale d'un float
    Par kryptong dans le forum D�buter
    R�ponses: 15
    Dernier message: 19/01/2013, 22h01
  2. Partie d�cimale d'un float
    Par dr� kam dans le forum C
    R�ponses: 33
    Dernier message: 29/06/2011, 17h01
  3. Extraire la partie d�cimal d'un float en c
    Par souhe_nits dans le forum D�buter
    R�ponses: 5
    Dernier message: 22/03/2011, 17h15
  4. Parties enti�re et d�cimale d'un float
    Par amateurc dans le forum Ada
    R�ponses: 15
    Dernier message: 31/07/2008, 20h42
  5. R�ponses: 15
    Dernier message: 30/01/2008, 18h23

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