Rechnen mit "float(str(Zahl)" ?
- birkenfeld
- Python-Forum Veteran
- Beiträge: 1603
- Registriert: Montag 20. März 2006, 15:29
- Wohnort: Die aufstrebende Universitätsstadt bei München
Ohne Zusammenhang ist das für mich bedeutungslos.
Sorry, aber noch hab ich nichts gerafft.
Das sind mir doch ein paar Aussagen zu viel (und scheinbar so widersprüchlich).
1. Mir ist schon klar, warum eine Zahl wie 0.3 binär nicht exakt dargestellt werden kann.
2. Mir ist auch klar warum das für z.b für 0.5 geht.
3. Mir ist ebenso klar, dass durch diese Ungenauigkeit ein Rechenfehler bei '0.3-01' auftritt, so dass das Ergebnis ungleich 0.2 ist.
4. Mir war nur eben nicht klar, warum str(0.3-0-1) auf einmal '0.2' ist.
Gut scheinbar wird da gerundet (das mit dem 'Nullen wegstreichen' war ja wohl überflüssig, immerhin reden wir von floatingpoint und nicht von fixedpoint).
Nur nach welchem System? An welcher Kommastelle? Woher weiß Python denn, wann gerundet werden soll und wann eine Zahl wie 0.19999999999999998 das tatsächlich erwartete Ergebnis darstellt?
Das sind mir doch ein paar Aussagen zu viel (und scheinbar so widersprüchlich).
1. Mir ist schon klar, warum eine Zahl wie 0.3 binär nicht exakt dargestellt werden kann.
2. Mir ist auch klar warum das für z.b für 0.5 geht.
3. Mir ist ebenso klar, dass durch diese Ungenauigkeit ein Rechenfehler bei '0.3-01' auftritt, so dass das Ergebnis ungleich 0.2 ist.
4. Mir war nur eben nicht klar, warum str(0.3-0-1) auf einmal '0.2' ist.
Gut scheinbar wird da gerundet (das mit dem 'Nullen wegstreichen' war ja wohl überflüssig, immerhin reden wir von floatingpoint und nicht von fixedpoint).
Nur nach welchem System? An welcher Kommastelle? Woher weiß Python denn, wann gerundet werden soll und wann eine Zahl wie 0.19999999999999998 das tatsächlich erwartete Ergebnis darstellt?
- Rebecca
- User
- Beiträge: 1662
- Registriert: Freitag 3. Februar 2006, 12:28
- Wohnort: DN, Heimat: HB
- Kontaktdaten:
Code: Alles auswählen
>>> str(0.123456789123456789123456789)
'0.123456789123'
Code: Alles auswählen
>>> 0.3
0.29999999999999999
>>> str(0.29999999999999999)
'0.3'
D.h. Python weiss ueberhaupt nichts von "exakt". Fuer den Computer sind diese Maschinenzahlen alle exakt.
hallo,
eigendlich wollte ich nichts mehr dazu schreiben aber egal.
eigendlich wollte ich nichts mehr dazu schreiben aber egal.
Code: Alles auswählen
>>> 0.12345678912345678913456789123456789123456789 #kein str
0.12345678912345678
>>>
- birkenfeld
- Python-Forum Veteran
- Beiträge: 1603
- Registriert: Montag 20. März 2006, 15:29
- Wohnort: Die aufstrebende Universitätsstadt bei München
Das ist sehr wohl ein String, solange bis er eingelesen und von Python zu einem Float konvertiert wurde.pyStyler hat geschrieben:hallo,
eigendlich wollte ich nichts mehr dazu schreiben aber egal.Code: Alles auswählen
>>> 0.12345678912345678913456789123456789123456789 #kein str
Und genauso ist das ein String. Eine Konsole kann keine Zahlen ausgeben, nur Text. Zahlen müssen in Text konvertiert werden.Code: Alles auswählen
0.12345678912345678
Und um Floats in Strings zu konvertieren, gibt es eben in Python zwei Möglichkeiten: str() und repr(). str() rundet auf 12 Nachkommastellen, repr() auf 17.