2010-01-13 30 views
1

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

是与 浮点数数据以下有效值:-3.40E + 38通过-1.18E - 38,0和1.18E - 38到3.40E + 38.存储大小为 4个字节。在SQL Server中,real的同义词 是float(24)。

SQL Server 2005中documentation

的ISO同义词真正为float(24)。

编辑: 鉴于我正在读它说的精度为7,但我可以在我的数据库(SQL Server 2005)的9参见下面的最大输入,因为类似地讲here问题没有。 7.

实施例:0.180000082

什么是真实真实精度以及是否有配置选项(即:兼容模式),其可影响精度?

回答

8

你的答案是你挂在同一页面上:

对于FLOAT数据类型,n是用于尾数存储在科学记数法

24位的位元数尾数给你(大约)7 十进制数字的精度(因为2^24〜= 10^7)。

编辑补充:

注意,每个人都口口声声说“约” - 这是有原因的:)

二进制浮点数字和小数点文字并不一定以一种直观的方式一起玩。背景请参阅What Every Computer Scientist Should Know About Floating-Point Arithmetic。另外请注意,说'精度为'的大约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位尾数的二进制浮点数,我不相信有一种方法可以改变它。如果要存储精确的小数量,浮点类型通常不是一个好选择。

+0

感谢您的解释,这让我疯狂! – 2010-01-13 16:37:01

+0

很好的答案,+2链接到那个经典的纸张 – Davos 2014-02-26 04:20:07

1

您将二进制(基2)精度与十进制(基准10)精度混淆。 24位给你大约7位十进制数字。

1

SQL Server使用4个字节或8个字节来存储非十进制浮点数。

如果您在范围内指定实数或任何值float < 1>浮动< 24>,SQL Server将在内部使用float> < 24>。如果您使用浮点数或浮点数范围内的任何数值来浮动浮点数(限制),它将使用浮点数,也称为双精度浮点数。

浮法在SQL Server 2005中的MSDN文档是在这里:float and real (Transact-SQL)

如果你有一个特定的精度需求,看看而是采用十进制,它提供了可配置的精度和规模:decimal and numeric (Transact-SQL)

相关问题