172 votes

Comment obtenir les chiffres après la virgule ?

Comment obtenir les chiffres après la virgule ?

Par exemple, si j'ai 5.55 comment puis-je obtenir .55 ?

2 votes

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.

265voto

jer Points 15036
5.55 % 1

Gardez à l'esprit que cela ne vous aidera pas pour les problèmes d'arrondi en virgule flottante. C'est-à-dire que vous pouvez obtenir :

0.550000000001

Ou alors un peu moins que les 0,55 que vous attendez.

9 votes

Quant à modf cela peut aussi nuire à la précision : math.modf(5.55) retournera (0.549999999999999998, 5.0).

3 votes

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.

8 votes

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.

192voto

Anthony V Points 1581

Utilisez modf :

>>> import math
>>> frac, whole = math.modf(2.5)
>>> frac
0.5
>>> whole
2.0

6 votes

Bonne solution, mais, math.modf(2.53) = (0.5299999999999998, 2.0) la réponse attendue est 0.53

12 votes

@LordLoh. C'est à cause de l'arrondi en virgule flottante, et cela se produira avec n'importe quelle méthode.

0 votes

@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

78voto

Jim Brissom Points 10282

Qu'en est-il :

a = 1.3927278749291
b = a - int(a)

b
>> 0.39272787492910011

Ou, en utilisant numpy :

import numpy
a = 1.3927278749291
b = a - numpy.fix(a)

39voto

intuited Points 7763

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.

30voto

lllluuukke Points 1186

Une approche facile pour vous :

number_dec = str(number-int(number))[1:]

40 votes

Exercice pour le lecteur : faire fonctionner le système pour les nombres supérieurs ou égaux à 10

1 votes

Si vous voulez omettre le point décimal, faites simplement ceci number_dec = str(n-int(n))[2:]

11 votes

number_dec = str(number-int(number)).split('.')[1]

Prograide.com

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.

Powered by:

X