Wie erhalte ich die Zahlen nach einem Dezimalpunkt?
Wenn 5.55
ja, wie komme ich zum Beispiel .55
?
python
floating-point
decimal
l - '' '' '' - '' '' '' '' '' '' ''
quelle
quelle
Antworten:
Ein einfacher Ansatz für Sie:
quelle
number_dec = str(number-int(number)).split('.')[1]
5.55 % 1
die auch eine allgemein nützlichere Antwort ist - man kann den Modulo-Divisionsansatz in mehreren Sprachen verwenden, während die obige Antwort Python-spezifisch ist..55
) zurück, die Sie aufgrund des Fragentitels möglicherweise nicht erwarten!str(5.55 - int(5.55))[1:]
kehrt.5499999999999998
anstelle der.55
in der Frage genannten zurück.Beachten Sie, dass dies bei Gleitkomma-Rundungsproblemen nicht hilfreich ist. Dh Sie können bekommen:
Oder ansonsten ein wenig von den 0,55, die Sie erwarten.
quelle
modf
, kann es auch die Präzision schrauben:math.modf(5.55)
wird zurückkehren (0,5499999999999998, 5,0).x%1
fast doppelt so schnell wie diex-int(x)
und-modf(x)[0]
Methoden (die Timings betrugen 980 ns, 1,39 us und 1,47 us, gemittelt über 1000000 Läufe). Mein Wert fürx
war immer positiv, also musste ich mir darüber keine Sorgen machen.Verwenden Sie modf :
quelle
math.modf(2.53) = (0.5299999999999998, 2.0)
erwartete Antwort ist 0,53Wie wäre es mit:
Oder mit numpy:
quelle
Mit dem
decimal
Modul aus der Standardbibliothek können Sie die ursprüngliche Genauigkeit beibehalten und Gleitkomma-Rundungsprobleme vermeiden:Wie Kindall Hinweise in den Kommentaren, werden Sie nativer konvertieren müssen
float
zuerst s in Strings.quelle
n = 5.55
, ist n ein Float, und Sie sollten tunDecimal(str(n)) % 1
, um den Bruchteil zu erhalten. (Dies ist nicht notwendig, wenn Sie eine Ganzzahl haben, aber es tut nicht weh.)10.0/3 % 1
zumindest auf meinem SystemDecimal.from_float(1.2)
(was jetzt als geschrieben werden kannDecimal(1.2)
), treten Rundungsprobleme auf, die durch diese Antwort vermieden werden sollten .Versuchen Sie Modulo:
quelle
Ähnlich wie bei der akzeptierten Antwort wäre ein noch einfacherer Ansatz mit Zeichenfolgen
quelle
number = 5.55; "." in number
gibtTypeError: argument of type 'float' is not iterable
. Und was würden Sie tun, wennnumber = 1e-5
?float
; Python weiß nicht, in welchem Format es ursprünglich ausgedrückt wurde. Meinnumber = 1e-5
Beispiel gilt ebenso gut fürnumber = 0.00001
: Diestr
Darstellung der Zahl erfolgt in wissenschaftlicher Notation. Sie werden mit beschäftigen möchtene+
sowiee-
von der Art und Weise.quelle
quelle
Dies ist eine Lösung, die ich versucht habe:
quelle
Manchmal sind nachgestellte Nullen wichtig
quelle
Verwenden Sie Boden und subtrahieren Sie das Ergebnis von der ursprünglichen Zahl:
quelle
import math
, warum nicht einfach verwendenmath.modf()
?math.floor(-1.1) == -2
aberint(-1.1) == -1
. Für diese Frage ist die Verwendungint
jedoch korrekter.Gleitkommazahlen werden nicht im Dezimalformat (base10) gespeichert. Lesen Sie die Python-Dokumentation dazu durch, um sich selbst davon 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 finden Sie ein Beispiel für die Verwendung der
Decimal
Bibliothek.quelle
Beispiel:
Dies gibt Ihnen zwei Zahlen nach dem Dezimalpunkt, 55 aus diesem Beispiel. Wenn Sie eine Zahl benötigen, reduzieren Sie die obigen Berechnungen um 10 oder erhöhen sie, je nachdem, wie viele Zahlen Sie nach der Dezimalstelle haben möchten.
quelle
Es hat definitiv funktioniert
quelle
Mit der einfachen Operator- Division '/' und der Floor-Division '//' können Sie leicht den Bruchteil eines bestimmten Schwimmers erhalten.
quelle
Wie wäre es mit:
Ausgabe:
print(b)
0.23399999999999999
round(b, length-2)
0.234
Da die Runde an die Länge der Dezimalzeichenfolge ('0,234') gesendet wird, können wir nur minus 2, um die '0' nicht zu zählen, und die gewünschte Anzahl von Dezimalstellen ermitteln. Dies sollte meistens funktionieren, es sei denn, Sie haben viele Dezimalstellen und der Rundungsfehler bei der Berechnung von b stört den zweiten Parameter der Runde.
quelle
Vielleicht möchten Sie dies versuchen:
Es wird zurückkehren
0.55
.quelle
Ausgabe: 0,55
quelle
Sehen Sie, was ich oft mache, um Zahlen nach dem Dezimalpunkt in Python 3 zu erhalten:
quelle
Wenn Sie Pandas verwenden:
quelle
Eine andere Möglichkeit wäre, das
re
Modul mitre.findall
oder zu verwendenre.search
:Ausgabe
Wenn Sie den Ausdruck vereinfachen / ändern / untersuchen möchten, wurde dies im oberen rechten Bereich von regex101.com erläutert . Wenn Sie möchten , können Sie in diesem Link auch sehen , wie es mit einigen Beispieleingaben übereinstimmt.
Quelle
Wie werden zusätzliche schwebende Zahlen bei der Python-Subtraktion entfernt?
quelle
Ich habe festgestellt, dass sehr große Zahlen mit sehr großen Bruchteilen Probleme verursachen können, wenn Modulo 1 verwendet wird, um den Bruch zu erhalten.
Ich griff stattdessen nach dem integralen Teil und subtrahierte ihn zuerst, um den Rest zu vereinfachen.
quelle
Ein weiteres Beispiel mit modf
quelle
Eine Lösung ist Modulo und Rundung.
Ihre Ausgabe wird 0,55 sein
quelle
Sie können dies verwenden:
quelle
Eine andere verrückte Lösung ist (ohne in einen String zu konvertieren):
quelle