Sever 2000 文档
是具有以下有效值的浮点数数据:- 3.40E + 38至-1.18E-38、0和1.18E-38至3.40E+ 38。存储大小为4字节。在Server中,real的同义词是float(24)。
Server 2005 文档
实的ISO同义词是浮动(24)。
编辑:根据我正在阅读的内容,它显示的精度为7,但我可以输入我的数据库( Server 2005)的最大值9,参见下面类似的这里问题7。
例子: 0.180000082
真实的真正精度是什么,是否有可能影响精度的配置选项(即:兼容性模式)?
发布于 2010-01-13 13:53:07
你的答案就在你所链接的同一页上:
对于浮点数数据类型,n是用科学表示法存储尾数的位数。
24位尾数为您提供(大约)7位小数位的精度(因为2^24 ~= 10^7)。
编辑以添加:
请注意,每个人都在说“大约”--这是有原因的:)
二进制浮点数和十进制文字不一定以直观的方式一起使用。要了解背景,请阅读关于浮点算法,每个计算机科学家应该知道什么?。还请注意,说‘大约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位尾数的二进制浮点数,我不认为有办法改变这一点。如果要存储精确的十进制量,浮点类型通常不是一个好的选择。
发布于 2010-01-13 13:50:53
您正在混淆二进制(基2)精度和十进制(基数10)精度。24位给你大约7小数位数。
发布于 2010-01-13 13:57:12
Server使用4个字节或8个字节存储非十进制浮点数.
如果在从float<1>到float<24>的范围内指定了real或任何值,则server在内部使用float<24>。如果您在float<25>到float<53> (限制)范围内使用浮点或任何东西,那么它使用float<53>,也就是所谓的双重精度。
Server 2005中浮点的MSDN文档如下:浮点数和实值(Transact-SQL)
如果您有特定的精度需求,请使用十进制,它提供可配置的精度和比例:十进制和数字(Transact-SQL)。
https://stackoverflow.com/questions/2057018
复制相似问题