Angesichts Ihrer Vektor
(-379.99418604651157, 47.517234218543351, 0.0) #representing point x
Der einfachste Weg Runden auszuführen, wie Sie funktioniert wahrscheinlich das Dezimal-Modul verwenden würde erwarten wäre: http://docs.python.org/library/decimal.html .
from decimal import Decimal:
point = (-379.99418604651157, 47.517234218543351, 0.0) #representing point x
converted = [Decimal(str(x)) for x in point]
Dann eine Annäherung zu erhalten, können Sie den Quantisierungswert-Methode verwenden:
>>> converted[0].quantize(Decimal('.0001'), rounding="ROUND_DOWN")
Decimal("-379.9941")
Dieser Ansatz hat den Vorteil der in der Fähigkeit gebaut, um Rundungsfehler zu vermeiden. Hoffentlich ist das hilfreich.
Edit:
Nachdem Sie Ihren Kommentar zu sehen, es sieht aus wie Sie zu sehen, sind versuchen, wenn zwei Punkte nahe zueinander sind. Diese Funktionen könnten tun, was Sie wollen:
def roundable(a,b):
"""Returns true if a can be rounded to b at any precision"""
a = Decimal(str(a))
b = Decimal(str(b))
return a.quantize(b) == b
def close(point_1, point_2):
for a,b in zip(point_1, point_2):
if not (roundable(a,b) or roundable(b,a)):
return False
return True
Ich weiß nicht, ob dies ist besser als ein Epsilon-Ansatz, aber es ist ziemlich einfach zu implementieren.
von fpformat import fix – Ant
@Ant: 'fix()' gibt eine Zeichenfolge zurück. Darüber hinaus ist "fpformat" seit Pyhon 2.6 veraltet und wurde in Python 3 entfernt. –
Ich wusste, dass fix eine Zeichenfolge zurückgibt, aber nicht, dass sie veraltet ist. Danke – Ant