round () in Python scheint nicht richtig zu runden
In der Dokumentation für die Runde() - Funktion besagt, dass es eine Zahl ist, und die Positionen, die Vergangenheit der Dezimalstelle zu Runden. So ist es sollte hierzu:
n = 5.59
round(n, 1) # 5.6
Aber in Wirklichkeit, die guten alten floating point unheimliche schleicht sich ein, und Sie erhalten:
5.5999999999999996
Für die Zwecke UI, muss ich Anzeige 5.6
. Ich stocherte im Internet und fand einige Dokumentationdass dies abhängig von meiner Implementierung von Python. Leider, dies tritt sowohl auf meinem Windows-dev-Maschine und die einzelnen Linux-server die ich ausprobiert habe. Siehe auch hier.
Kurz von meine eigene Runde Bibliothek, gibt es eine Möglichkeit, um dieses?
InformationsquelleAutor der Frage swilliams | 2008-09-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
kann nicht helfen, die Art, wie es gespeichert, aber zumindest Formatierung ordnungsgemäß funktioniert:
InformationsquelleAutor der Antwort Jimmy
Formatierung funktioniert einwandfrei, auch ohne Runde:
InformationsquelleAutor der Antwort Vinko Vrsalovic
Wenn Sie verwenden Sie den Decimal-Modul können Sie Ungefähre Angaben, die ohne die Verwendung des "Runden" - Funktion. Hier ist was ich habe mit für die Rundung vor allem beim schreiben von Währungs-Anwendungen:
Wird das Ergebnis eine Dezimalzahl, das ist 16.20 Uhr.
InformationsquelleAutor der Antwort Robert Griesmeyer
round(5.59, 1)
ist in Ordnung. Das problem ist, dass 5.6 können nicht exakt dargestellt werden, in binäre Gleitkommazahl.Als Vinko sagt, Sie kann die Verwendung von string-Formatierung zu tun, die Rundung für die Anzeige.
Python hat eine Modul für dezimal Arithmetik wenn Sie das brauchen.
InformationsquelleAutor der Antwort Will Harris
Bekommen Sie '5.6', wenn Sie tun
str(round(n, 1))
statt nurround(n, 1)
.InformationsquelleAutor der Antwort Tomi Kyöstilä
Können Sie wechseln Sie den Datentyp integer:
Und dann Anzeige der Anzahl durch einfügen des Gebietsschemas Dezimaltrennzeichen.
Jedoch Jimmy ' s Antwort ist besser.
InformationsquelleAutor der Antwort Frank Krueger
Gleitkomma-Mathematik ist anfällig für leichte, aber ärgerliche, Präzision Ungenauigkeiten. Wenn Sie die Arbeit mit integer oder fixed point, Sie werden garantiert Präzision.
InformationsquelleAutor der Antwort spoulson
Werfen Sie einen Blick auf die Decimal-Modul
und
Dezimal stellt die Art der Operationen, die machen es einfach zu schreiben apps, die erfordern, dass floating-point-Operationen und auch müssen diese Ergebnisse in einer für Menschen lesbaren format, z.B. Buchhaltung.
InformationsquelleAutor der Antwort Jesse Dhillon
Können Sie die string-format-operator
%
ähnlich wie sprintf.InformationsquelleAutor der Antwort nlucaroni
printf den Sauger.
InformationsquelleAutor der Antwort Jason Navarrete
Es ist ein großes problem in der Tat. Probieren Sie diesen code:
Es zeigt 4.85. Dann machst du:
und es zeigt, 4.8. Tun Sie Berechnungen von hand die genaue Antwort ist 4.85, aber wenn Sie versuchen:
sehen Sie die Wahrheit: die float-Punkt gespeichert ist, als der nächste endliche Summe von Brüchen, deren Nenner eine Potenz von zwei.
InformationsquelleAutor der Antwort Alexandre Lymberopoulos
Funktioniert Perfekt
InformationsquelleAutor der Antwort Станислав Повышев
Bin ich dabei:
In diesem Fall werden wir die erste Runde richtig auf der unit-Ebene, die wir dann konvertieren zu integer zu vermeiden, drucken Sie ein Schwimmer.
so
Ich denke, diese Antwort besser funktioniert als die Formatierung der Zeichenfolge, und es macht auch mehr sens für mich die Verwendung der round-Funktion.
InformationsquelleAutor der Antwort Gildas
Hier bin ich zu sehen, Runde scheitern. Was, wenn Sie wollten, um diese 2 zahlen auf eine Dezimalstelle?
23.45
23.55
Meine Ausbildung war, dass aus Rundung, diese sollten Sie bekommen:
23.4
23.6
die "Regel" ist, dass Sie sollten in der Runde, wenn der vorhergehende Nummer war seltsam, nicht rund, wenn die vorhergehenden Nummer wurden sogar.
Die round-Funktion in python einfach kürzt die 5.
InformationsquelleAutor der Antwort Gregory Pittman
Code:
Ausgabe:
InformationsquelleAutor der Antwort Dondon Jie
Das problem ist nur, wenn die Letzte Ziffer ist 5. ZB. 0.045 wird intern gespeichert als 0.044999999999999... Man konnte erhöhen Sie einfach die Letzte Ziffer 6 und abrunden. Dies gibt Ihnen die gewünschten Ergebnisse.
InformationsquelleAutor der Antwort Syed Is Saqlain
Was:
InformationsquelleAutor der Antwort ima