SQL Server数据类型精度 - Neo,什么是真实的?

时间:2010-01-13 13:48:01

标签: sql-server types precision

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

真实的真正精确度是什么?是否存在可能影响精度的配置选项(即:兼容模式)?

3 个答案:

答案 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)

事实是realfloat(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)