float mit Nachkommastellen

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
Friedericus
User
Beiträge: 25
Registriert: Dienstag 21. September 2010, 14:59

Sers Leuts,

ich steh grad etwas aufm schlauch:

Code: Alles auswählen

a = float(5**1/2)

print float(a)
es soll aus 5 die Wurzel gezogen werden (inklusive Nachkommastellen). wenn ich das jedoch so ausführe, dann wirft er mir
aus.

Weiß jemand was ich falsch mache?
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

Einen typischen Fehler, du teilst durch einen integer.

Mach 2.0 aus der 2, dann gehts.
oder aus der 1/2 gleich eine 0.5
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Friedericus hat geschrieben:

Code: Alles auswählen

a = float(5**1/2)
Python 2.x
5 ** 1 = 5
5 / 2 = 2

Python 3.x
5 ** 1 = 5
5 / 2 = 2.5

Was du eigentlich haben möchtest sind Klammern (und bei Python 2.x eine Rechnung mit Floats):
5 ** (1.0 / 2)
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

Oder

Code: Alles auswählen

from __future__ import division
am Anfang vermeidet viel Ärger.
BlackJack

Oder vielleicht auch einfach `math.sqrt()`. :-)
Benutzeravatar
hendrikS
User
Beiträge: 420
Registriert: Mittwoch 24. Dezember 2008, 22:44
Wohnort: Leipzig

@Darii:
3.0 Features mit 2.0 Features zu mischen finde ich keine besonders gute Idee. Irgendwann kommst Du durcheinander. Es gibt so viel Möglichkeiten das zu lösen.
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

hendrikS hat geschrieben:3.0 Features mit 2.0 Features zu mischen finde ich keine besonders gute Idee. Irgendwann kommst Du durcheinander.
Nicht mehr und nicht weniger als mit jedem anderen __future__-Import. Der division-Import steht bei mir jedenfalls in jeder Datei, in der ich rechne und für Integer-Division gibt es auch in 2.5 schon //. Da gibt es einfach nichts durcheinanderzubekommen.

Das einzige womit man da durcheinanderkommt, ist, dass das Standardverhalten von Python 2.x an dieser Stelle so unsäglich dämlich ist. Ich glaube es gibt niemanden der jemals dafür dankbar war, dass Python standardmäßig Integer-Division betreibt. Die float-Lösung aus 3.x ist zwar imo nicht das Optimum (das wäre ein Bruch wie es Smalltalk macht) aber besser als nichts.
Antworten