Comment obtenir les chiffres après la virgule ?
Par exemple, si j'ai 5.55
comment puis-je obtenir .55
?
Comment obtenir les chiffres après la virgule ?
Par exemple, si j'ai 5.55
comment puis-je obtenir .55
?
Quant à modf
cela peut aussi nuire à la précision : math.modf(5.55)
retournera (0.549999999999999998, 5.0).
Quelqu'un sait-il quelle serait l'opération la plus rapide, la méthode décrite ci-dessus, ou : float b = a - int(a) ? je soupçonne la dernière, mais je voulais voir s'il y avait une confirmation.
Sur un Raspberry Pi, cette méthode x%1
était presque deux fois plus rapide que le x-int(x)
y modf(x)[0]
(les timings étaient de 980ns, 1.39us, et 1.47us en moyenne sur 1000000 exécutions). Ma valeur pour x
était toujours positif, donc je n'ai pas eu à m'inquiéter à ce sujet.
Utilisez modf :
>>> import math
>>> frac, whole = math.modf(2.5)
>>> frac
0.5
>>> whole
2.0
Bonne solution, mais, math.modf(2.53) = (0.5299999999999998, 2.0)
la réponse attendue est 0.53
@LordLoh. C'est à cause de l'arrondi en virgule flottante, et cela se produira avec n'importe quelle méthode.
@LordLoh. Essayez d'utiliser round(0.5299999999999998 , 2) pour obtenir 0.53 Une autre façon est d'utiliser Decimal du paquet decimal. docs.python.org/2/library/decimal.html
Utilisation de la decimal
de la bibliothèque standard, vous pouvez conserver la précision originale et éviter les problèmes d'arrondi en virgule flottante :
>>> from decimal import Decimal
>>> Decimal('4.20') % 1
Decimal('0.20')
Comme gentilhomme notes dans les commentaires, il vous faudra convertir en natif float
aux chaînes de caractères en premier.
Exercice pour le lecteur : faire fonctionner le système pour les nombres supérieurs ou égaux à 10
Si vous voulez omettre le point décimal, faites simplement ceci number_dec = str(n-int(n))[2:]
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
2 votes
En rapport : En Python, comment diviser un nombre par le point décimal ?
0 votes
Je pense que vous devriez modifier la réponse acceptée à ce sujet. J'ai failli ne pas faire défiler le texte jusqu'à la réponse votée x10 fois, et cela m'aurait fait mal plus tard.
0 votes
Je pense que c'est une approche simple :
float( '0.' + str(5.55).split('.')[1] )
>>> 0.55. Mais si quelqu'un pense différemment, faites-le moi savoir.