【问题标题】:How to store value in MSSQL 2008 with high precision?如何在 MSSQL 2008 中高精度存储价值?
【发布时间】:2013-01-11 10:51:45
【问题描述】:

我在 VisualStudio 端有 Double 类型的值。

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

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

在 SQL 端,最后几位数字被截断和四舍五入。

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

提前谢谢你!

【问题讨论】:

标签: .net sql sql-server


【解决方案1】:

使用 Decimal 数据类型而不是 float。

这是一个例子

DECIMAL(30, 17)

30 = 小数位数的最大总数

17 = 小数点右侧可存储的最大小数位数。

更多内容

http://msdn.microsoft.com/en-us/library/aa258832(v=sql.80).aspx

【讨论】:

    【解决方案2】:

    .Net Double 和 MSSQL 服务器 float 是近似数值数据类型。

    它们提供了一种存储"real" 号码的有效方式。在内部,它们被存储为两个精确的二进制数,基数(matissa)和乘数(指数)。他们的精度根据这两个精确二进制数的相对大小而变化,尤其是尾数。使用这些 floating point numbers 的操作在现代处理器上进行了优化,尤其是 GPU。

    在数字的小端,范围内的每个实数都没有二进制值。当用于存储数字的各个比率不同时,这些间隙是交错的,并且在转换比率之间的数字时会出现小的舍入误差。使用浮点数就是这样。当浮点数用于表示自然数据时,任何一种方式的五分之一都没有太大区别。

    如果你真的需要额外的精度,你应该使用 MSSQL decimalnumeric 和 .Net Decimal 类型。但是,与浮点相比,它们使用更多空间并且性能较低。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

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

        你可以使用decimal

        【讨论】:

          猜你喜欢
          • 2015-06-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-03-03
          • 1970-01-01
          • 1970-01-01
          • 2011-04-15
          • 1970-01-01
          相关资源
          最近更新 更多