2013-01-11 31 views
0

我在VisualStudio端有Double類型值。如何以高精度在MSSQL 2008中存儲值?

我需要將此值存儲在MSSQL 2008中的float列類型中。

的問題是,我的價值的精度爲17位數字後點,

在SQL側的最後幾個數字被切斷和圓潤。

任何想法如何使SQL服務器保持原樣(即不更改最後數字)?

預先感謝您!

+0

如何使用小數類型而不是浮點數? – hgulyan

+1

根據MSDN,.Net Double的精度爲15或16位數字,而不是17. http://msdn.microsoft.com/en-gb/library/678hzkk9(v=vs.110).aspx – Jodrell

+0

Do你真的需要精確到17位數字? – Jodrell

回答

2

.Net Double和MSSQL服務器float是近似的數字數據類型。

他們提供了一個有效的方式來存儲"real"號碼。在內部,它們存儲爲兩個確切的二進制數,基數(matissa)和乘數(指數)。它們的精度根據這兩個確切二進制數的相對大小而變化,尤其是尾數。使用這些floating point numbers的操作在現代處理器(尤其是GPU)上進行了優化。

在數字的小端沒有該範圍內每個實數的二進制值。當用於存儲數字的各個比率不同時,這些間隔是交錯的,並且您會得到轉換比率之間的數字的小舍入誤差。浮點數就是這樣。當使用浮點數來表示自然數據時,任何一種方式都沒有太大區別。

如果您確實需要額外的精度,則應使用MSSQL decimalnumeric和.Net Decimal類型。但是,他們使用更多空間並且性能低於浮點。

1

FLOAT並不確切。爲了高精度,您應該將它們作爲DECIMAL/NUMERIC存儲在數據庫中。

1

你不會從FLOAT類型得到精度浮點數,因爲是一個近似的數據類型

使用近似數數據類型的浮點數字數據。浮點數據是近似的;因此,並非數據類型範圍中的所有值都可以精確表示

您可以使用decimal