我在VisualStudio端有Double類型值。如何以高精度在MSSQL 2008中存儲值?
我需要將此值存儲在MSSQL 2008中的float列類型中。
的問題是,我的價值的精度爲17位數字後點,
在SQL側的最後幾個數字被切斷和圓潤。
任何想法如何使SQL服務器保持原樣(即不更改最後數字)?
預先感謝您!
我在VisualStudio端有Double類型值。如何以高精度在MSSQL 2008中存儲值?
我需要將此值存儲在MSSQL 2008中的float列類型中。
的問題是,我的價值的精度爲17位數字後點,
在SQL側的最後幾個數字被切斷和圓潤。
任何想法如何使SQL服務器保持原樣(即不更改最後數字)?
預先感謝您!
.Net Double
和MSSQL服務器float
是近似的數字數據類型。
他們提供了一個有效的方式來存儲"real"號碼。在內部,它們存儲爲兩個確切的二進制數,基數(matissa)和乘數(指數)。它們的精度根據這兩個確切二進制數的相對大小而變化,尤其是尾數。使用這些floating point numbers的操作在現代處理器(尤其是GPU)上進行了優化。
在數字的小端沒有該範圍內每個實數的二進制值。當用於存儲數字的各個比率不同時,這些間隔是交錯的,並且您會得到轉換比率之間的數字的小舍入誤差。浮點數就是這樣。當使用浮點數來表示自然數據時,任何一種方式都沒有太大區別。
如果您確實需要額外的精度,則應使用MSSQL decimal
或numeric
和.Net Decimal
類型。但是,他們使用更多空間並且性能低於浮點。
FLOAT
並不確切。爲了高精度,您應該將它們作爲DECIMAL/NUMERIC存儲在數據庫中。
使用十進制數據類型而不是float。
下面是一個例子
DECIMAL(30, 17)
30 =最大的十進制數字
17 =能夠存儲到小數點右邊的十進制數字最大數量總數。
更多關於此
http://msdn.microsoft.com/en-us/library/aa258832(v=sql.80).aspx
如何使用小數類型而不是浮點數? – hgulyan
根據MSDN,.Net Double的精度爲15或16位數字,而不是17. http://msdn.microsoft.com/en-gb/library/678hzkk9(v=vs.110).aspx – Jodrell
Do你真的需要精確到17位數字? – Jodrell