我試圖從TADOQuery包裝對象執行下面的SQL查詢時,得到的問題:SQL Server Express的精度
SELECT *
FROM obj
WHERE ObjectType = 'user'
AND ((((valueOne > 6.13661152336E-318) and (valueTwo < 1.68611310981)
的問題顯然是ValueOne
太小,因此不能正常64位機器精度內表示。問題是我從一個文件中讀取這些值,並且我無法控制我得到的輸入數據。我會實施一個四捨五入程序來處理這個問題,但我不確定SQL Server 2012 Express中最小(以絕對值)表示的數字。
誰能幫我對此事
謝謝你!那麼,在SQL服務器的精度範圍內截斷我的ValueOne的最佳方法是什麼? – kenny 2013-03-01 13:45:32
在客戶端截斷它。您需要一個庫來解析該值並將其轉換爲SQL Server支持的範圍內的值。這不是一個簡單的'圓',因爲你沒有價值。這個問題比你想象的要複雜得多。有關替代方案的討論,請參閱http://stackoverflow.com/questions/1387430/recommended-math-library-for-c-net的答案。 – 2013-03-01 13:48:04
再次感謝您的幫助。我做了類似 round(valueOne * power(10,10))/ power(10,10); 這對我很有用,因爲我不需要比小數點後10位更大的精度。 – kenny 2013-03-01 15:15:15