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:]
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.
Utilisez modf :
>>> import math
>>> frac, whole = math.modf(2.5)
>>> frac
0.5
>>> whole
2.0
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)
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 float
s natifs en chaînes.
Essayez Modulo:
5.55%1 = 0.54999999999999982
import math
orig = 5.55
whole = math.floor(orig) # whole = 5.0
frac = orig - whole # frac = 0.55
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])))
import math
x = 1245342664.6
print( (math.floor(x*1000)%1000) //100 )
Ça a fonctionné
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.
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
>>> n=5.55
>>> if "." in str(n):
... print "."+str(n).split(".")[-1]
...
.55
C'est une solution que j'ai essayée:
num = 45.7234
(whole, frac) = (int(num), int(str(num)[(len(str(int(num)))+1):]))
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)
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
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
.
number=5.55
decimal=(number-int(number))
decimal_1=round(decimal,2)
print(decimal)
print(decimal_1)
sortie: 0.55