hallo,
ich schaffe es nicht einen float auf ein gültige stelle nach dem komma zu runden...gehtdas nicht mit
a = 0.456
round(a,1) ???
sollte 0.4 ergeben
zumindest gibt es in der python shell was anderes als im skript - da gehts nämlich.
danke
ronud(float,1) nur in skript und nicht in der python shell
tschuldigung, dass ich dir nicht helfen kann, aber noch was:
was ist das für ein runden, wenn ich auf die zweite stelle hinter dem komma runden möchte, aber das ergebnis damit nicht übereinstimmt?
(python 2.4.3 final)
Code: Alles auswählen
>>> a = 0.456
>>> round(a,1)
0.5
>>> round(a,2)
0.46000000000000002
>>> round(a,3)
0.45600000000000002
>>> round.__doc__
'round(number[, ndigits]) -> floating point number\n\nRound a number to a given precision in decimal digits (default 0 digits).\nThis always returns a floating point number. Precision may be negative.'
>>>
(python 2.4.3 final)
http://www.cs.unm.edu/~dlchao/flake/doom/
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hi Mati!Mati hat geschrieben:round(a,1) ???
``round()`` gibt laut Definition eine Fließkommazahl zurück. Das bedeutet, dass man mit dem Ergebnis von ``round()`` weiterrechnen kann, ohne wieder von String nach Float umwandeln zu müssen. ``round()`` ist also nicht für die Anzeige von Zahlen gedacht!
Willst du die Zahl einfach nur anzeigen, dann verwende
Code: Alles auswählen
"%.2f" % 0.456
Gerold

http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Eigentlich 0.5, und das geht auch.Mati hat geschrieben:hallo,
ich schaffe es nicht einen float auf ein gültige stelle nach dem komma zu runden...gehtdas nicht mit
a = 0.456
round(a,1) ???
sollte 0.4 ergeben
Aber 0.4, das geht nicht. `round(x, n)` rundet und gibt eine Fliesskommazahl zurück, die einem `x` auf `n` Nachkommastellen (dezimal) am nächsten kommt. Und 0.4 kann der Computer als Fliesskommazahl nicht darstellen. Kleiner Test, ganz ohne Funktionen:
Code: Alles auswählen
In [1]: 0.1
Out[1]: 0.10000000000000001
In [2]: 0.2
Out[2]: 0.20000000000000001
In [3]: 0.3
Out[3]: 0.29999999999999999
In [4]: 0.4
Out[4]: 0.40000000000000002
In [5]: 0.5
Out[5]: 0.5
Das ist nur die Ausgabe. Die Shell benutzt die `repr()` Funktion um Objekte in eine Zeichenkette zur Anzeige umzuwandeln und die ist bei Fliesskommazahlen "ehrlich". Bei ``print`` wird die `str()` Funktion benutzt und die "lügt" bei Fliesskommazahlen weil sie rundet (ich glaube auf 10 Stellen):zumindest gibt es in der python shell was anderes als im skript - da gehts nämlich.
Code: Alles auswählen
In [6]: a = 0.3
In [7]: print a
0.3
In [8]: print repr(a)
0.29999999999999999
Und man sollte Fliesskommazahlen auch nie exakt auf Gleichheit oder Ungleichheit testen. Folgendes ist eine Endlosschleife:
Code: Alles auswählen
a = 0
while a != 1:
a += 0.1