1

SQL Sever 2000文档

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

SQL Server 2005文档

real 的 ISO 同义词是 float(24)。

编辑:鉴于我正在阅读的内容,它说精度是 7,但我可以在我的数据库(SQL Server 2005)中输入最大为 9 的内容,见下文,如此问题号所述。7.

示例:0.180000082

real的真正精度是多少,是否有配置选项(即:兼容模式)会影响精度?

4

3 回答 3

8

您的答案在您链接的同一页面上:

对于 FLOAT 数据类型,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)

事实是,它与 24 位尾数的二进制浮点数real相同,我不相信有办法改变这一点。float(24)如果要存储精确的十进制数量,浮点类型通常不是一个好的选择。

于 2010-01-13T13:53:07.923 回答
1

您将二进制(以 2 为底)精度与十进制(以 10 为底)精度混淆了。24 位为您提供大约 7 个十进制数字。

于 2010-01-13T13:50:53.017 回答
1

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

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

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

如果您有特定的精度需求,请改用小数,它提供可配置的精度和小数位数:小数和数字 (Transact-SQL)

于 2010-01-13T13:57:12.113 回答