我有一個系統,它的運行了一堆計算的,由於某種原因,每次0.07顯示了它看起來0.07000000000000001紅寶石浮法問題
我很清楚地知道,花車是近似的,但我在寫代碼例如:
儘管如此,0.07000000000000001一直顯示在我的代碼並最終導致數組排序失敗:
sort! { |a,b| b <=> a } <-- b equals 0.07000000000000001 and a equals 0.08
它會引發錯誤說它不能比較這兩個數字。有關如何解決這個問題的任何想法?
更新
所以看起來好像原值爲0.07351923338974675在這一點我稱之爲.round(2)。然後我暫時將它存儲在Redis中,然後再將它拉出來。當它進行計算時,它最終顯示爲0.07000000000000001。這聽起來像整數比較可能是最好的,除非有其他解決方案。
可以比較整數和浮點數。其中一個必須是別的。你也應該顯示'num1 - num2'是什麼。 – sawa
正在提出的錯誤是什麼?如果這些值真的是你所說的,那麼我看不到他們爲什麼不可以比較的任何理由,即使漂移在0.07以內。另外,正如@Cthulhu所說,'round()'可能是更好的方法來消除浮點漂移。 – mdunsmuir
這將花費我10分鐘左右來測試...會有更新。嘗試。圓(2)第一 –