Ich mache ein Programm, das aus Gründen, die nicht erklärt werden müssen, erfordert, dass ein Float in einen String konvertiert wird, der mit len () gezählt wird. Str (float (x)) führt jedoch dazu, dass x gerundet wird, wenn es in einen String konvertiert wird, der das Ganze abwirft. Kennt jemand eine Lösung dafür? Hier ist der Code, der verwendet wird, wenn Sie wissen möchten:
len(str(float(x)/3))
python
string
floating-point
rounding
Galileo
quelle
quelle
x
. Ohne Beispiele können wir nur raten, wo das Problem liegt.Antworten:
Beim Umgang mit Gleitkommazahlen ist häufig eine Form der Rundung unvermeidbar. Dies liegt daran, dass Zahlen, die Sie genau in Basis 10 ausdrücken können, nicht immer genau in Basis 2 (die Ihr Computer verwendet) ausgedrückt werden können.
Beispielsweise:
In diesem Fall sehen Sie 0,1 umgewandelt in einen String mit
repr
:Ich glaube, Python schneidet die letzten Ziffern ab, wenn Sie str () verwenden, um dieses Problem zu umgehen, aber es ist eine teilweise Problemumgehung, die nicht das Verständnis der Vorgänge ersetzt.
Ich bin mir nicht sicher, welche Probleme das "Runden" genau verursacht. Vielleicht würden Sie die Formatierung von Zeichenfolgen besser nutzen, um Ihre Ausgabe genauer zu steuern?
z.B
Dokumentation hier .
quelle
Ich muss jedoch sagen, dass dies nicht so zuverlässig ist, wie Sie denken.
Gleitkommazahlen werden als Dezimalzahlen eingegeben / angezeigt, aber Ihr Computer (in der Tat Ihre Standard-C-Bibliothek) speichert sie als Binärzahlen. Sie erhalten einige Nebenwirkungen von diesem Übergang:
Die Erklärung, warum dies geschieht, finden Sie in diesem Kapitel des Python-Tutorials.
Eine Lösung wäre die Verwendung eines Typs, der speziell Dezimalzahlen verfolgt, wie z. B. Pythons
decimal.Decimal
:quelle
Andere Antworten wiesen bereits darauf hin, dass die Darstellung von schwebenden Zahlen, gelinde gesagt, ein heikles Thema ist.
Da Sie in Ihrer Frage nicht genügend Kontext angeben, kann ich nicht wissen, ob das Dezimalmodul für Ihre Anforderungen nützlich sein kann:
http://docs.python.org/library/decimal.html
Unter anderem können Sie die Genauigkeit, die Sie erhalten möchten (aus den Dokumenten), explizit angeben:
Ein einfaches Beispiel aus meiner Eingabeaufforderung (Python 2.6):
Vielleicht kann das helfen? Dezimal ist in Python stdlib seit 2.4, mit Ergänzungen in Python 2.6.
Hoffe das hilft, Francesco
quelle
Ich weiß, dass dies zu spät ist, aber für diejenigen, die zum ersten Mal hierher kommen, möchte ich eine Lösung veröffentlichen. Ich habe einen Gleitkommawert
index
und eine Zeichenfolgeimgfile
und hatte das gleiche Problem wie Sie. So habe ich das Problem behobenDie Ausgabe ist
Sie können dieses Formatierungsbeispiel nach Ihren Wünschen ändern.
quelle