web-dev-qa-db-fra.com

Comment obtenir des nombres après le point décimal?

Comment puis-je obtenir les chiffres après un point décimal?

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

Une approche facile pour vous:

number_dec = str(number-int(number))[1:]
20
lllluuukke
5.55 % 1

Gardez à l'esprit que cela ne vous aidera pas avec les problèmes d'arrondi en virgule flottante. I.e., vous pouvez obtenir:

0.550000000001

Ou bien un peu au-delà des 0,55 que vous attendez.

140
jer

Utilisez modf :

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

Qu'en est-il de:

a = 1.3927278749291
b = a - int(a)

b
>> 0.39272787492910011

Ou, en utilisant numpy:

import numpy
a = 1.3927278749291
b = a - numpy.fix(a)
47
Jim Brissom

En utilisant le module decimal de la bibliothèque standard, vous pouvez conserver la précision d'origine et éviter les problèmes d'arrondi en virgule flottante:

>>> from decimal import Decimal
>>> Decimal('4.20') % 1
Decimal('0.20')

Comme kindallnotes dans les commentaires, vous devrez d'abord convertir les floats natifs en chaînes.

31
intuited

Essayez Modulo:

5.55%1 = 0.54999999999999982
6
Juri Robl
import math
orig = 5.55
whole = math.floor(orig)    # whole = 5.0
frac = orig - whole         # frac = 0.55
4
Kevin Lacquement

similaire à la réponse acceptée, une approche encore plus simple en utilisant des chaînes serait

if "." in str(number): # quick check if it is decimal
    number_dec = str(number).split(".")[1]

if 'e-' in str(number): # scientific notation
    number_dec = format(float(number_dec), '.%df'%(len(number_dec.split(".")[1].split("e-")[0])+int(number_dec.split('e-')[1])))
3
yosemite_k
import math

x = 1245342664.6
print( (math.floor(x*1000)%1000) //100 )

Ça a fonctionné

1
Ali

Exemple:

import math
x = 5.55
print((math.floor(x*100)%100))

Ceci vous donnera deux nombres après le point décimal, 55 à partir de cet exemple. Si vous avez besoin d’un nombre, vous réduisez de 10% les calculs ci-dessus ou augmentez-le en fonction du nombre que vous souhaitez après la décimale.

1
Frank

Utilisez floor et soustrayez le résultat du nombre d'origine:

>> import math #gives you floor.
>> t = 5.55 #Give a variable 5.55
>> x = math.floor(t) #floor returns t rounded down to 5..
>> z = t - x #z = 5.55 - 5 = 0.55
1
thyrgle
>>> n=5.55
>>> if "." in str(n):
...     print "."+str(n).split(".")[-1]
...
.55
1
ghostdog74

C'est une solution que j'ai essayée:

num = 45.7234
(whole, frac) = (int(num), int(str(num)[(len(str(int(num)))+1):]))
1
kurian

Parfois, les zéros à la fin importent

In [4]: def split_float(x):
   ...:     '''split float into parts before and after the decimal'''
   ...:     before, after = str(x).split('.')
   ...:     return int(before), (int(after)*10 if len(after)==1 else int(after))
   ...: 
   ...: 

In [5]: split_float(105.10)
Out[5]: (105, 10)

In [6]: split_float(105.01)
Out[6]: (105, 1)

In [7]: split_float(105.12)
Out[7]: (105, 12)
1
George Fisher

Les nombres flottants ne sont pas stockés au format décimal (base10). Parcourez la documentation python dessus pour vous assurer pourquoi. Par conséquent, il est déconseillé d'obtenir une représentation base10 à partir d'un float.

Il existe maintenant des outils permettant de stocker des données numériques au format décimal. Vous trouverez ci-dessous un exemple utilisant la bibliothèque Decimal.

from decimal import *

x = Decimal('0.341343214124443151466')
str(x)[-2:] == '66'  # True

y = 0.341343214124443151466
str(y)[-2:] == '66'  # False
1
jpp

Vous voudrez peut-être essayer ceci:

your_num = 5.55
n = len(str(int(your_num)))
float('0' + str(your_num)[n:])

Il retournera 0.55.

0
Ashkan Mirzaee
number=5.55
decimal=(number-int(number))
decimal_1=round(decimal,2)
print(decimal)
print(decimal_1)

sortie: 0.55

0
Sanchit Aluna