什麼是比較兩個浮點數值以獲得精確相等的優雅,可讀和非冗長的方法?檢查兩個浮點數/雙精度值是否相等
聽起來很簡單,它是一個邪惡的問題。該==
運營商沒有得到楠完成工作,並且還具有零特殊處理:
(+0.0 == -0.0) -> true
Double.NaN == Double.NaN -> false
但我想,以確定是否兩個值是完全一樣的(但我不照顧針對不同的NaN模式,所以任何NaN ==任何其他NaN - > true)。
我可以這個醜八怪一段代碼做到這一點:
Double.doubleToLongBits(a) == Double.doubleToLongBits(b)
有沒有更好的方式來寫這個(並意圖明顯)?
你不一天爲什麼你想這樣做。如果他們真的是浮點數,你的答案將不會有意義。 – Julian 2013-03-22 18:18:35
@ Julian參見PeterLawrey的答案就是一個非常有意義的例子。然而,我的應用程序是一個對象的equals()方法,其中float是主鍵的一部分(不是我自己選擇的)。浮點通常無法直觀的假設,所以我很小心地覆蓋邊緣案例。 – Durandal 2013-03-25 10:53:16
對不起,你不能做得更好,你的「醜陋的怪物片」已經是完美的了...... – 2013-03-25 11:36:16