首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL Server数据类型的精度- Neo,什么是真实的?

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

Stack Overflow用户
提问于 2010-01-13 13:48:01
回答 3查看 7.2K关注 0票数 1

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

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-01-13 13:53:07

你的答案就在你所链接的同一页上:

对于浮点数数据类型,n是用科学表示法存储尾数的位数。

24位尾数为您提供(大约)7位小数位的精度(因为2^24 ~= 10^7)。

编辑以添加:

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

二进制浮点数和十进制文字不一定以直观的方式一起使用。要了解背景,请阅读关于浮点算法,每个计算机科学家应该知道什么?。还请注意,说‘大约7个十进制数字的精度’并不是不兼容的,能够存储一个值超过7个重要数字!但是,这确实意味着该数据类型将无法区分0.180000082和0.180000083,例如,因为它实际上没有存储以下两种类型的确切值:

代码语言:javascript
复制
declare @f1 real
declare @f2 real

set @f1 = 0.180000082
set @f2 = 0.180000083

select @f1, @f2

select @f1 - @f2
代码语言:javascript
复制
------------- -------------
0.1800001     0.1800001

(1 row(s) affected)


-------------
0

(1 row(s) affected)

事实上,realfloat(24)是一样的,它是一个带有24位尾数的二进制浮点数,我不认为有办法改变这一点。如果要存储精确的十进制量,浮点类型通常不是一个好的选择。

票数 8
EN

Stack Overflow用户

发布于 2010-01-13 13:50:53

您正在混淆二进制(基2)精度和十进制(基数10)精度。24位给你大约7小数位数。

票数 1
EN

Stack Overflow用户

发布于 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)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2057018

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档