Float in einer List,

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
3D-Operator
User
Beiträge: 9
Registriert: Donnerstag 11. Oktober 2007, 12:19

Dienstag 23. Oktober 2007, 10:37

Servus,
ich habe mal eine Frage zu Floats in einer List.

ich habe zwei Listen mit den Werten im Beispiel.

meine erste Frage dazu ist, wenn ich den topVector1 ausgebe dann bekomme ich die Werte die auch drin sind, wenn ich aber nur topVector1[0] ausgebe dann bekomme ich eine "kuerzere" Zahl heraus!

meine zweite Frage ist, width ergibt das Ergebnis 23.0, und wird durch 0.5 dividiert, das Ergebnis von tileAcross ist 46.0. aber wenn ich es dann als int(tileAcross) ausgebe bekomme ich 45!!!


[code=py]
import math

tilesize=0.5

topVector1=[69.448009935042961, 3.2652270793914795, 8.1317279836453142]
topVector2=[85.711465902333543, 3.2652270793914795, -8.1317279836452787]

width=math.sqrt((math.pow(topVector2[0]-topVector1[0],2))+(math.pow(topVector2[1]-topVector1[1],2))+(math.pow(topVector2[2]-topVector1[2],2)))
tilesAcross= (width/tilesize)
[/code]
BlackJack

Dienstag 23. Oktober 2007, 10:52

Du bekommst immer die gleichen Werte. In Listen werden Fliesskommazahlen nur mit mehr Nachkommastellen angezeigt weil in Listen die `repr()`-Funktion zum Darstellen benutzt wird.

Code: Alles auswählen

In [591]: a = 0.1

In [592]: print a, [a]
0.1 [0.10000000000000001]

In [593]: str(a), repr(a)
Out[593]: ('0.1', '0.10000000000000001')
Der Wert von `a` ist aber immer der selbe. Man kann sogar noch mehr Stellen ausgeben lassen:

Code: Alles auswählen

In [594]: '%.56f' % a
Out[594]: '0.10000000000000000555111512312578270211815834045410156250'
Das Ergebnis von `tilesAcross` ist nicht 46.0 sondern 45.999999999999986 (bzw. 45.9999999999999857891452847979962825775146484375). `int()` rundet nicht, sondern schneidet die Nachkommastellen einfach ab:

Code: Alles auswählen

In [608]: int(1.9)
Out[608]: 1
3D-Operator
User
Beiträge: 9
Registriert: Donnerstag 11. Oktober 2007, 12:19

Dienstag 23. Oktober 2007, 11:03

ich dachte wenn er mir 46.0 ausgiebt dass es dann auch 46.0 ist,

ich wusste nicht dass ich die Nachkommazahlen mir trotzdem anzeigen lassen kann


Vielen Dank.
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Dienstag 23. Oktober 2007, 11:17

Darf ich auch noch diesen Thread in die Runde werfen:
http://www.python-forum.de/viewtopic.ph ... ght=#78776
?

Könnte Dir helfen Deinen Code etwas aufzuräumen 3D-operator ;-).

Gruß,
Christian
Antworten