我在 VisualStudio 端有 Double 类型的值。
我需要将此值以浮点列类型存储在 MSSQL 2008 中。
问题是我的值的精度是该点后的十七位数字,
在 SQL 端,最后几位数字被剪切和四舍五入。
知道如何使 SQL 服务器保持原样(即不更改最后一位)吗?
先感谢您!
我在 VisualStudio 端有 Double 类型的值。
我需要将此值以浮点列类型存储在 MSSQL 2008 中。
问题是我的值的精度是该点后的十七位数字,
在 SQL 端,最后几位数字被剪切和四舍五入。
知道如何使 SQL 服务器保持原样(即不更改最后一位)吗?
先感谢您!
使用小数数据类型而不是浮点数。
这是一个例子
DECIMAL(30, 17)
30 = 小数位数的最大总数
17 = 可以存储在小数点右侧的最大小数位数。
更多关于这个
http://msdn.microsoft.com/en-us/library/aa258832(v=sql.80).aspx
.NetDouble
和 MSSQL 服务器float
是近似数值数据类型。
它们提供了一种存储“真实”数字的有效方式。在内部,它们被存储为两个精确的二进制数,基数(matissa)和乘数(指数)。他们的精度根据这两个精确二进制数的相对大小而变化,尤其是尾数。使用这些浮点数的操作在现代处理器上进行了优化,尤其是 GPU。
At the small end of the number there is not a binary value for every real number in the range. When the respective ratios used to store the numbers differ, these gaps are interlaced and you get small rounding errors converting the numbers between ratios. With floating point numbers thats just the way it is. When floating point numbers are used to represent natural data a quintillionth either way doesn't make much difference.
If you really need the extra precision you should use the MSSQL decimal
or numeric
and the .Net Decimal
type. However, they use more space and have lower performance than floating points.
FLOAT
不准确。为了获得高精度,您应该将它们作为DECIMAL / NUMERIC存储在数据库中。