我注意到,當我存儲一個雙精度值,例如x = 0.56657011973046234
在sqlite數據庫中,然後在稍後檢索,我得到y = 0.56657011973046201
。根據sqlite spec和.NET spec(我原本都不打算讀這兩個:)這是預期的和正常的。如何將C#double「修剪」爲它將存儲在sqlite數據庫中的值?
我的問題是,雖然高精度並不重要,但我的應用程序會處理用戶輸入/選擇表示基本3D信息的雙打,然後在其上運行模擬來查找結果。這個輸入可以被保存到一個sqlite數據庫中,以後重新加載並重新運行。
發生混淆是因爲新創建的一系列輸入顯然會以與稍後以相同的輸入存儲和重新加載(雙值更改時)稍有不同的方式進行模擬。這是合乎邏輯的,但不是渴望的。
我還沒有完全瞭解如何處理這個問題,但同時我想限制/限制用戶輸入值,這些值可以精確地存儲在sqlite數據庫中。所以如果用戶輸入0.56657011973046234
,它實際上被轉換成0.56657011973046201
。
但是,我一直無法弄清楚,給定一個數字,將存儲在數據庫中的值是什麼,實際上從數據庫中存儲和檢索它看起來很笨重。有沒有一個確定的方法來做到這一點?
你知道,如果皇家麥比微電腦做到了這一點,愛德華洛倫茲就永遠不會發現混沌理論。 :) – 2010-11-17 01:35:59
@fostandy:這些實際值(0.56657011973046234和0.56657011973046201)還是你製作的? 0.56657011973046201是17位數字,所以它應該往返與0.56657011973046234(我在C中檢查過,它不是)相同的double值。 – 2010-11-17 13:48:44
@Rick Regan - 0.56657011973046234是我從random.NextDouble()獲得的東西。 0.56657011973046201是我將它存儲在sqlite數字字段中並再次獲取後獲得的。據我瞭解(這是有限的)最後2位數字不保證往返。 – fostandy 2010-11-18 03:46:40