Bonjour à tous , je cherche a avoir une méthode prés-définie qui me retourne la partie décimal.
merci
Bonjour à tous , je cherche a avoir une méthode prés-définie qui me retourne la partie décimal.
merci
Salut,
Tu peux passer par "modulo" comme ceci:
Ciao
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 nb = 2.051 print nb%1 >>> 0.051
Ju
Il n'y aura pas un problème de précision ? Tu as testé Julien N ?
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
Python 2.x
Python 3.x
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 >>> nb = 2.051 >>> print nb%1 0.051
En effet en python 2 ça fonctionne mais pas avec la version 3...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 >>> nb = 2.051 >>> print(nb%1) 0.051000000000000156
Salut,
Ce qui change avec Python3 c'est la précision affichée par "print" mais pas le nombre lui même:
Pour le reste, il n'y a pas de fonction dans la libc qui retourne la partie décimale d'un nombre.
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 >>>
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
Salut Wiztricks,
Évidemment j'avais déjà testé tout cela et je m'attendais à cette réponseC'est em... lorsqu'on fait de la comptabilité mais dans ce cas on n'utilise pas des "float" mais plutôt Decimal ou autre.
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')
Ce que tu peux faire c'est ca :
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 !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 #import math ton_nombre=ton_nombre-math.floor(ton_nombre)
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 l'imprécision sur des float, ne permet pas d'avoir la valeur de la partie décimale de cette façon.Que cherches-tu a démontrer?
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
Applique ton code au même contre-exemple:
Ta "solution" ne fonctionne pas.
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 >>>
Par contre:
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".
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 >>>
- W
En effet, il ne doit pas y avoir grand chose à faire, que de se faire une raison...
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'>
Presque 8 ans plus tard !
Sinon tant qu'à faire en version dégoulasse : float('0.'+str(2.051).split('.')[1])
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
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager