SqlServer:精度53是什么意思?

时间:2014-06-16 16:20:14

标签: sql-server

例如,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是一些虚拟数字,18真实精度,如http://msdn.microsoft.com/en-us/library/ms190476.aspx所述?

2 个答案:

答案 0 :(得分:2)

  

精确度53意味着什么,似乎不可能将十进制数字放入8个字节?

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

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

答案 1 :(得分:1)

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

  

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

53是数据库级别的精度设置,如果在声明浮点数据类型时没有明确设置它。