我有一個處理一些地理座標在.NET中的方法,我有一個結構,存儲一個座標對,如果256傳入一個座標,它變爲0.但是,在一個特定的實例計算大約255.99999998的值,並因此存儲在結構中。當它在ToString()中打印時,它變成了256,這不應該發生 - 256應該是0.我不介意打印255.9999998,但是當調試器顯示255.99999998時打印256是一個問題。它存儲和顯示0會更好。如何解決一些舍入錯誤?
特別是有比較的問題。 255.99999998足夠接近256,所以它應該等於它。比較雙打時我應該怎麼做?使用某種類型的epsilon值?
編輯:具體來說,我的問題是,我需要一個值,執行一些計算,然後對這個數字進行計算相反,我需要找回原來的值準確。
使用epsilon是比較浮點值的唯一合法方法。 abs(a - b)<= eps – Andrey 2010-06-23 01:37:38
將兩個浮點數與==進行比較是完全合法的,因此幾乎沒有任何編譯器抱怨它。然而,最小的四捨五入誤差會導致這兩個值在數學說他們應該是不相等的,這就是爲什麼如果你重視你的理智不建議。 – cHao 2010-06-23 02:08:52
如果您確實只需要將原始值準確恢復,您是不是可以直接存儲它,或者是關於原始計算過程的一些信息以及數字? – 2010-06-24 18:52:13