Konvertieren Float Dezimalstellen ohne Rundung
Habe ich eine Liste, und Sie enthält eine gewisse Anzahl '5.74536541'
in dem ich eine Konvertierung in eine float.
Ich bin drucken Sie es aus in Python 3 mit ("%0.2f" % (variable))
aber druckt er immer aus 5.75 statt 5.74.
Ich weiß, Sie denken wen kümmert es, aber es ist für eine Währung-Konverter-Programm, und ich will nicht, dass die Währungen zu round up/down-aber um genau zu sein.
Wie kann ich halten Sie es aus Rundung, sondern halten auch die 2 Nachkommastellen?
- stackoverflow.com/questions/783897/truncating-floats-in-python
- Wenn Sie sicher sind, dass der string eine Zahl ist, dann können Sie einfach Bearbeiten den text direkt.
- Deine Frage macht keinen Sinn, 5.75 näher an die Zahl als 5.74. Halten Sie die zahlen so gespeichert, wie Sie schwimmt, und lassen Sie Sie drucken mit Rundung - was ist das problem?
- Hat er nicht das schweigen der Vernunft in der Frage?
I know you're thinking who cares, but it is for a currency converter program and I don't want the currencies to round up/down but to be exact.
- Wenn ich die Google-Währung-Konverter-er wandelt auf 5.74 nicht 5.75, ich bin mit, dass um genau zu sein.
- Das ist nicht 'exakt', obwohl. Die richtige Art und Weise zu tun, ist es, alle die Mathe in voller Präzision (evtl. auch mit decimal-Modul, für finanzielle Sachen) und nur Runde für Druck Zwecke.
- Ich glaube nicht, dass "exakt" bedeutet, was Sie denken, es bedeutet
InformationsquelleAutor Goose | 2012-12-04
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie nicht verwenden floating-point-zahlen für Währung, aufgrund von Rundungsfehlern, wie Sie erwähnt.
Ihre beste Wette ist die Verwendung eines fester Genauigkeit
decimal
, wo Sie auch die volle Kontrolle darüber, wie Rundung und abschneiden funktioniert. Aus den docs:Sollten Sie alle repräsentieren Währung-basierte Werte intern als
Decimals
mit hoher Präzision (die standard-Niveau der Präzision sollte in Ordnung sein in deinem Fall - lassen Sie einfach dieprec
allein!). Wenn Sie möchten, drucken Sie ein schön formatiertes Dollar und Cent Wert, die der Benutzer über dielocale
- Modul ist eine einfache Möglichkeit, dies zu tun.Seien Sie vorsichtig, wenn Druck wie haben Sie auf die Quantisierung der
Decimal
nach unten, um die richtige Anzahl der stellen für die Anzeige oder die Rundung nicht auf der Grundlage IhrerDecimal
Kontext! Sie sollten nur führen Sie diequantize
Schritt für die endgültige Anzeige oder für einen einzigen, letzten Wert - alle Zwischenschritte verwenden sollten, hochpräziseDecimal
s zu machen, die alle Vorgänge so genau wie möglich.Decimal
- Objekt erstellt, ist es mit der Präzision erforderlich, um das Objekt darzustellen, (siehe im Beispiel oben, in dem Pi-Eingang mit mehr als 6 wesentliche zahlen nach der Einstellung der Kontext). Tut eine operation, die dezimal zurückkehren sollte, eine neue decimal-Objekt mit dem Kontext-präzise (z.B.var - 0
). Sind Sie sicher, dass Sie wollen, dass solche geringe Genauigkeit? Ich denke, möchten Sie vielleicht zu halten, die Genauigkeit so hoch wie nötig undROUND_DOWN
für die Letzte 2-stellige Anzeige? Auch, prec = 2 Rendite5.7
für dein Beispiel.Decimal
Objekte und mit einem hohen Maß an Präzision. Für das drucken von dollars und cents-Werte, erwägen Sie die Verwendunglocale
. Ich werde aktualisieren, meine Antwort mit einem Beispiel.Wenn man sich mit Währung und Genauigkeit ankommt, nicht verwenden
float
verwendendecimal
.Nehmen die Anzahl mod 0.01
d.h.
drucken dann das gleiche wie vorher.
Sagte dieser, Rundung nach unten ist nicht genauer. Sind Sie versuchen, den alten stehlen Geld von einer bank, durch die Ausnutzung von Rundungsfehlern Schema?
This said, rounding down is not more accurate.
Bank nicht geben Ihnen mehr, wenn Sie konvertieren Währung, obwohl. Es ist ein legitimer Grund zum abschneiden.Floating point Werte sind bekannt als "nützliche Näherungen". Was auch immer Sie tun, um eine floating-point-Zahl—Runde ist es, es abschneiden, was auch immer—wenn das Ergebnis eine Gleitkommazahl, Sie nicht bekommen, zu entscheiden, wie viele Ziffern rechts vom Dezimalkomma hat.
Nie Verwendung floating-point-Werte für Währung. Sehen
pydoc decimal
zum Beispiel. Python decimal-Modul unterstützt dezimal-Festpunkt-und dezimal-Gleitkomma-Arithmetik.Python docs warnen zu Runden schwimmt.
Wenn Sie nicht vorsichtig sind, werden Sie irregeführt durch den Wert, der angezeigt wird, bei der interpreter-Eingabeaufforderung.
Und
Wenn die Zahl ist ein string, dann kürzen Sie die Zeichenfolge, um nur 2 Zeichen nach dem Komma und dann konvertieren Sie es in einen float.
Sonst multipliziere es mit 10^n, wobei n die Anzahl der Ziffern nach dem Komma und dann teilen Sie Ihre float von 10^n.