SQL Sever 2000 documentation:
是浮点数数据 以下有效值:-3.40E + 38到-1.18E - 38,0和1.18E - 38至3.40E + 38.存储大小为 4字节。在SQL Server中,同义词 对于真实是浮动(24)。
SQL Server 2005 documentation:
real的ISO同义词是float(24)。
编辑: 鉴于我正在阅读的内容,它表示精度为7,但我可以在我的数据库(SQL Server 2005)中输入最多9个,如下所示,类似于here问题编号。 7。
示例:0.180000082
真实的真正精确度是什么?是否存在可能影响精度的配置选项(即:兼容模式)?
答案 0 :(得分:8)
您的答案就在您关联的同一页上:
对于FLOAT数据类型,n是用于以科学计数法存储尾数的位数
24位尾数为您提供(大约)7 十进制精度数字(因为2 ^ 24~ = 10 ^ 7)。
编辑添加:
请注意,每个人都在说'大约' - 这是有原因的:)
二进制浮点数和十进制文字不一定以直观的方式一起播放。对于背景阅读What Every Computer Scientist Should Know About Floating-Point Arithmetic。另请注意,说“ precision ”的大约7位十进制数字与能够存储超过7位有效数字的值并不相容!但这确实意味着此数据类型将无法区分0.180000082和0.180000083,例如,因为它实际上并未存储完全值:
declare @f1 real
declare @f2 real
set @f1 = 0.180000082
set @f2 = 0.180000083
select @f1, @f2
select @f1 - @f2
------------- -------------
0.1800001 0.1800001
(1 row(s) affected)
-------------
0
(1 row(s) affected)
事实是real
与float(24)
相同,是一个24位尾数的二进制浮点数,我不相信有办法改变它。如果要存储精确的十进制数量,浮点类型通常不是一个好的选择。
答案 1 :(得分:1)
您将二进制(基数2)精度与十进制(基数10)精度混淆。 24位给出大约7位小数。
答案 2 :(得分:1)
SQL Server使用4个字节或8个字节来存储非十进制浮点数。
如果您指定float< 1>范围内的实数或任何值为了浮动< 24>,SQL服务器使用float< 24>内部。如果你使用float或float< 25>范围内的任何东西。浮动< 53> (限制),它使用浮点数< 53>这也称为双精度。
SQL Server 2005中的float的MSDN文档位于:float and real (Transact-SQL)
如果您有特定的精度需求,请改为使用十进制,它提供可配置的精度和比例:decimal and numeric (Transact-SQL)