例如,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所述?
答案 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是数据库级别的精度设置,如果在声明浮点数据类型时没有明确设置它。