對於長時間的問題以及對於不是真正最小的代碼,抱歉。Python新手如何解決浮點比較的問題
我對浮點比較的棘手有非常有限的理解。 我已閱讀了一些有關該主題的python文檔和教程。我讀過一些SO討論,如https://stackoverflow.com/a/4029397/1445400。
但是,我不知道如何應用「爲什麼不使用str(value)」或「只用%格式化」或「您必須使用Decimal」等響應。我最喜歡的主題是「只是忽略小數點後第11位......它們並不重要,如果將響應格式化爲字符串,最終可以獲得正確的美學效果。」我不知道如何在我的應用程序中完成這項工作。
這是我的代碼,它可能看起來像作業,但真的不是。我正在計算跨越非矩形多邊形的網格線的交點。我生成一個矩形,移動一個或多個角點,然後繪製並重繪多邊形上的網格,所以我需要計算網格線開始,結束和交叉的位置。
def partition_boundaries(start, stop, number_of_partitions):
interval = (stop - start)/number_of_partitions
l = [start, stop]
i = 1
while i < number_of_partitions:
l.insert(i, start + i*interval)
i += 1
return l
def test():
test_cases = [
((0.0, 1.0, 2), [0, .5, 1]),
((0.0, 1.0, 4), [0.0, 0.25, 0.5, 0.75, 1.0]),
]
passes = 0
for (args, expected_result) in test_cases:
result = partition_boundaries(*args)
if result != expected_result:
print "Failed for: ", args, ". Expected: ", expected_result, " Got: ", result
else:
passes = passes + 1
print passes, " out of ", len(test_cases), " test cases passed."
test()
這將產生象輸出: 失敗爲:(0.0,1.0,4)。預計:[0.0,0.25,0.5,0.75000000000000011,1.0]獲得:[0.0,0.25,0.5,0.75,1.0]
相信這樣簡單的事情需要奧術演習,比如將數字轉換成字符串再返回,或者編寫我自己的功能來比較差異的絕對值和寬容度等。「這不應該是這麼難」,但也許我需要克服自己。這也讓我感到緊張,因爲我可以「輕輕地」將我的孩子介紹給「真正的」節目。
我不是在做財務會計,也不需要很多有意義的數字。
對於這段代碼,你如何推薦我繼續我的初學者教育?