Wie bekomme ich die Zahlen nach einem Dezimalpunkt?
Wenn ich beispielsweise 5.55
habe, wie bekomme ich .55
?
Ein einfacher Ansatz für Sie:
number_dec = str(number-int(number))[1:]
5.55 % 1
Beachten Sie, dass dies bei Rundungsproblemen mit Fließkommazahlen nicht helfen wird. Das heißt, Sie können erhalten:
0.550000000001
Oder ein wenig von den erwarteten 0,55.
Verwenden Sie modf :
>>> import math
>>> frac, whole = math.modf(2.5)
>>> frac
0.5
>>> whole
2.0
Wie wäre es mit:
a = 1.3927278749291
b = a - int(a)
b
>> 0.39272787492910011
Oder mit numpy:
import numpy
a = 1.3927278749291
b = a - numpy.fix(a)
Wenn Sie das Modul decimal
aus der Standardbibliothek verwenden, können Sie die ursprüngliche Genauigkeit beibehalten und Rundungsprobleme mit Gleitkommazahlen vermeiden:
>>> from decimal import Decimal
>>> Decimal('4.20') % 1
Decimal('0.20')
Als kindallnotes in den Kommentaren müssen Sie zunächst native float
s in Strings konvertieren.
Testen Sie Modulo:
5.55%1 = 0.54999999999999982
import math
orig = 5.55
whole = math.floor(orig) # whole = 5.0
frac = orig - whole # frac = 0.55
Ähnlich wie die akzeptierte Antwort wäre ein noch einfacherer Ansatz mit Strings
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 )
Es hat definitiv funktioniert
Beispiel:
import math
x = 5.55
print((math.floor(x*100)%100))
Das bedeutet, dass Sie zwei Zahlen hinter dem Dezimalpunkt erhalten, 55 aus diesem Beispiel. Wenn Sie eine Zahl benötigen, reduzieren Sie die obigen Berechnungen um 10 oder erhöhen sich je nach Anzahl der Nachkommastellen.
Verwenden Sie Floor und ziehen Sie das Ergebnis von der ursprünglichen Nummer ab:
>> 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
Dies ist eine Lösung, die ich ausprobiert habe:
num = 45.7234
(whole, frac) = (int(num), int(str(num)[(len(str(int(num)))+1):]))
Manchmal sind nachfolgende Nullen von Bedeutung
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)
Float-Nummern werden nicht im Dezimalformat (Base10) gespeichert. Lesen Sie die Python-Dokumentation durch, um sich zu überzeugen, warum. Daher ist es nicht ratsam, eine Base10-Darstellung von einem Float zu erhalten.
Jetzt gibt es Tools, mit denen numerische Daten im Dezimalformat gespeichert werden können. Unten sehen Sie ein Beispiel für die Verwendung der Decimal
-Bibliothek.
from decimal import *
x = Decimal('0.341343214124443151466')
str(x)[-2:] == '66' # True
y = 0.341343214124443151466
str(y)[-2:] == '66' # False
Möglicherweise möchten Sie Folgendes versuchen:
your_num = 5.55
n = len(str(int(your_num)))
float('0' + str(your_num)[n:])
Es wird 0.55
zurückgegeben.
number=5.55
decimal=(number-int(number))
decimal_1=round(decimal,2)
print(decimal)
print(decimal_1)
ausgabe: 0,55
Wie wäre es mit:
a = 1.234
b = a - int(a)
length = len(str(a))
round(b, length-2)
Ausgabe:print(b)
0.23399999999999999
round(b, length-2)
0.234
Da die Runde auf die Länge der Dezimalzeichenfolge ('0.234') gesendet wird, können wir einfach minus 2 eingeben, um die '0' nicht zu zählen und die gewünschte Anzahl von Dezimalpunkten zu ermitteln. Dies sollte in den meisten Fällen funktionieren, es sei denn, Sie haben viele Dezimalstellen und der Rundungsfehler bei der Berechnung von b beeinträchtigt den zweiten Parameter von round.