【问题标题】:SqlServer: what means precision 53?SqlServer:精度 53 是什么意思?
【发布时间】:2014-06-16 16:20:13
【问题描述】:

例如 FLOAT 类型具有默认数值精度53

SELECT * FROM sys.types

TDS 协议发送精度 53,但通过 OLEDB 精度返回为 18
精确度53 到底是什么意思,似乎不可能将尽可能多的十进制数字放入 8 个字节中? OLEDB 如何从该号码中获取18?我在 Microsoft 资源中找到了 MaxLenFromPrecision,但这个数组的精度高达 37,仅适用于数字类型。 FreeTDS 的数组最大为 77 tds_numeric_bytes_per_prec,但与 Microsoft 的数据不同,并且与 OLEDB 返回的索引 53 不相似,而不是 18。也就是说53 是一些虚拟数字,而18http://msdn.microsoft.com/en-us/library/ms190476.aspx 中描述的真实精度?

【问题讨论】:

    标签: sql-server


    【解决方案1】:

    精度 53 究竟是什么意思,将尽可能多的十进制数字放入 8 个字节中似乎是不可能的?

    精度 53 是 53 位。 8 个字节包含 64 位。

    double precision floating point number 有 1 个符号位、11 个指数位和 53 个尾数位。

    【讨论】:

    • 所以微软解释的精度(OLEDB 为 18)是十进制的,而 53 是位?例如。 10^18 = 2^53?
    • @user2091150:根据我的计算器,2^53 更像是 10^16。对于双精度浮点数,53 位精度是最高的。
    • 相同的 16 个,但可能再加上 1 个签名 en.wikipedia.org/wiki/IEEE_754-2008
    【解决方案2】:

    来自 BOL:http://msdn.microsoft.com/en-us/library/ms173773.aspx

    其中n是用于存储尾数的位数 科学计数法中的浮点数,因此,指示 精度和存储大小。如果指定了 n,它必须是一个值 介于 1 和 53 之间。n 的默认值为 53

    如果您在声明浮点数据类型时未明确设置,则在数据库级别设置的精度为 53。

    【讨论】:

      猜你喜欢
      • 2014-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-26
      • 2021-05-02
      相关资源
      最近更新 更多