如何以高精度在MSSQL 2008中存储价值?

时间:2013-01-11 10:51:45

标签: .net sql sql-server

我在VisualStudio方面有双重类型值。

我需要在浮点列类型中将此值存储在MSSQL 2008中。

问题是我的值的精度是该点之后的十七位数,

在SQL端,最后几位数被剪切并舍入。

知道如何让SQL服务器保持原样(即不更改最后一位数字)?

提前谢谢!

4 个答案:

答案 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 decimalnumeric以及.Net Decimal类型。但是,它们使用的空间更多,性能也低于浮点数。

答案 2 :(得分:1)

FLOAT并不确切。为了获得高精度,您应该将它们存储为数据库中的DECIMAL / NUMERIC

答案 3 :(得分:1)

您不会从FLOAT类型获得精度,因为float是近似数据类型

  

用于浮点数字数据的近似数字数据类型。浮点数据是近似值;因此,并非数据类型范围中的所有值都可以精确表示

您可以使用decimal