2017-03-15 6 views
0

それは不正なデータを返すので、私は、私は山車を比較しています方法に問題がある:Pythonの比較山車

0.100000 < 0.100000 =

def check_potential_field(current, squares): 
    if len(squares) == 0: 
    return False 
    for square in squares: 
    distance = math.sqrt(math.pow(current.x - square.x, 2) + math.pow(current.y - square.y, 2)) 
    if distance < current.current_distance: 
     print "%f < %f = True" % (distance, current.current_distance) 
     return True 
    return False 
+1

ケア:ここ

は、それがどのように見える可能性がどのようでしょうか? –

+1

'0.1 + 0.1 + 0.1 == 0.3'を試しましたか? 'False';を返す) –

+0

2つの浮動小数点は異なる値を持つことができますが、それらを印刷するときも同じように見えます。これは、浮動小数点数の文字列表現が四捨五入されて、小数点の後に十桁近く表示されないようにするためです。実際に0.1と0.1000001を比較している可能性があります。もちろん、前者が後者よりも小さい場合もあります。 – Kevin

答えて

0

真の私がコメントで指定されたリンクをチェックしますPython 2.7のための最も美しい方法ではありませんが、それは機能します。

誰かが簡単な解決策を教えてくれました。そこで、浮動小数点数を文字列に変更して比較することができます(これはテストしているアルゴリズムには十分です)。問題とどのようなあなたはそれを解決しようとしていますについての詳細を記述するために

def check_potential_field(self, square): 
     distance = math.sqrt(math.pow(self.x - square.x, 2) + math.pow(self.y - square.y, 2)) 
     return str(distance) < str(self.current_distance)