我在VisualStudio端有双精度类型值。
我需要将这个值存储在MSSQL2008中的浮点列类型中。
问题是我的值的精度是点后的17位数,
在SQL端,最后几个数字是截取和舍入的。
你知道如何让SQL服务器保持原样(也就是不改变最后一位数)吗?
提前谢谢你!
发布于 2013-01-11 19:20:35
.Net Double和MSSQL server float是近似的数字数据类型。
它们提供了一种存储"real"编号的有效方法。在内部,它们被存储为两个精确的二进制数,基数(马蒂萨)和乘数(指数)。其精度根据这两个精确二进制数的相对大小而变化,特别是尾数。使用这些floating point numbers的操作在现代处理器上得到了优化,尤其是GPU。
在数字的小端,并不是范围内的每个实数都有二进制值。当用于存储数字的各个比率不同时,这些间隙是交错的,并且在比率之间转换数字时会产生很小的舍入误差。对于浮点数,就是这样。当使用浮点数来表示自然数据时,任何一种方式都没有太大的区别。
如果您确实需要额外的精度,则应该使用MSSQL decimal或numeric以及.Net Decimal类型。然而,与浮点数相比,它们占用更多的空间,并且性能较低。
发布于 2013-01-11 19:00:13
使用Decimal数据类型而不是float。
下面是一个例子
DECIMAL(30, 17)30 =最大小数位总数
17 =小数点右侧可存储的最大小数位数。
更多关于这方面的信息
http://msdn.microsoft.com/en-us/library/aa258832(v=sql.80).aspx
发布于 2013-01-11 18:58:38
FLOAT并不准确。为了提高精度,您应该将它们存储为DB上的DECIMAL / NUMERIC。
https://stackoverflow.com/questions/14276571
复制相似问题