Seite 1 von 1

Wo sind Nachkommastellen (float)?

Verfasst: Donnerstag 3. August 2017, 11:01
von Nachbar
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

Re: Wo sind Nachkommastellen (float)?

Verfasst: Donnerstag 3. August 2017, 11:15
von kbr
Formatiere die Ausgabe explizit

Code: Alles auswählen

from __future__ import print_function
print('{:.14f}'.format(a * a))
oder nutze Python 3.

Re: Wo sind Nachkommastellen (float)?

Verfasst: Donnerstag 3. August 2017, 12:45
von Sirius3
@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'

Re: Wo sind Nachkommastellen (float)?

Verfasst: Donnerstag 3. August 2017, 18:54
von Nachbar
Danke, da wäre ich im Leben nicht drauf gekommen! :oops: