Seite 1 von 1

Float in einer List,

Verfasst: Dienstag 23. Oktober 2007, 10:37
von 3D-Operator
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]

Verfasst: Dienstag 23. Oktober 2007, 10:52
von BlackJack
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

Verfasst: Dienstag 23. Oktober 2007, 11:03
von 3D-Operator
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.

Verfasst: Dienstag 23. Oktober 2007, 11:17
von CM
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