Wo sind Nachkommastellen (float)?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Nachbar
User
Beiträge: 24
Registriert: Sonntag 10. Juli 2016, 08:12

Hi Zusammen,

ich ermittele im Programm eine float Zahl (gespeichert in Variable a), die als 5.56776436283 ausgegeben wird (print a).

Wenn ich in der Python Konsole eingebe: 5.56776436283 * 5.56776436283, erhalte ich: 30.99999999999976

Wenn ich aber im Programm eingebe: print a * a (oder auch print 5.56776436283 * 5.56776436283) erhalte ich ein gerundetes Ergebnis, nämlich 31.0. Ich möchte aber das Ergebnis mit den ganzen Nachkommastellen haben.

Wo ist hier der Haken :K
Benutzeravatar
kbr
User
Beiträge: 1487
Registriert: Mittwoch 15. Oktober 2008, 09:27

Formatiere die Ausgabe explizit

Code: Alles auswählen

from __future__ import print_function
print('{:.14f}'.format(a * a))
oder nutze Python 3.
Sirius3
User
Beiträge: 17737
Registriert: Sonntag 21. Oktober 2012, 17:20

@Nachbar: float-Zahlen sind (fast) immer Näherungen. Du mußt selbst wissen, wie genau Du welche Zahlen bestimmen kannst, und dann entsprechend nur die Anzahl der signifikanten Stellen ausgeben. Python geht davon aus, dass eine Zahl mit zwölf 9en wohl eher ein 31 ist, weil das in 99.9% der Fälle für den normalen Nutzer sinnvoller ist. Deine Zahl sieht so aus, als ob sie in Wirklichkeit 5.5677643628300215... wäre und nur auf 11-13 Nachkommastellen gerundet wurde. Nehmen wir an, die Zahl wäre auf 12 Nachkommastellen gerundet, dann wäre die korrekte Ausgabe:

Code: Alles auswählen

>>> '{:.12f}'.format(5.56776436283*5.56776436283)
'31.000000000000'
Nachbar
User
Beiträge: 24
Registriert: Sonntag 10. Juli 2016, 08:12

Danke, da wäre ich im Leben nicht drauf gekommen! :oops:
Antworten