我在VisualStudio方面有双重类型值。
我需要在浮点列类型中将此值存储在MSSQL 2008中。
问题是我的值的精度是该点之后的十七位数,
在SQL端,最后几位数被剪切并舍入。
知道如何让SQL服务器保持原样(即不更改最后一位数字)?
提前谢谢!
答案 0 :(得分:3)
使用十进制数据类型而不是浮点数。
这是一个例子
DECIMAL(30, 17)
30 =最大总小数位数
17 =可以存储在小数点右侧的最大小数位数。
更多关于此
http://msdn.microsoft.com/en-us/library/aa258832(v=sql.80).aspx
答案 1 :(得分:2)
.Net Double
和MSSQL服务器float
是近似数字数据类型。
它们提供了一种存储"real"数字的有效方法。在内部,它们存储为两个精确的二进制数,基数(matissa)和乘数(指数)。它们的精度根据这两个精确二进制数的相对大小而变化,尤其是尾数。使用这些floating point numbers的操作在现代处理器(尤其是GPU)上进行了优化。
在数字的小端,该范围内的每个实数都没有二进制值。当用于存储数字的各个比率不同时,这些间隙是交错的,并且在转换比率之间的数字时会出现小的舍入误差。浮点数就是这样的。当浮点数用于表示自然数据时,无论哪种方式都没有太大差异。
如果您确实需要额外的精确度,则应使用MSSQL decimal
或numeric
以及.Net Decimal
类型。但是,它们使用的空间更多,性能也低于浮点数。
答案 2 :(得分:1)
FLOAT
并不确切。为了获得高精度,您应该将它们存储为数据库中的DECIMAL / NUMERIC。
答案 3 :(得分:1)