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
Partager