代码之家  ›  专栏  ›  技术社区  ›  rick schott

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

  •  1
  • rick schott  · 技术社区  · 15 年前

    SQL Server 2000 documentation :

    是浮点数数据,具有 以下有效值:_“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个,如下所述 here 问题7。

    示例:0.180000082

    准确度是多少 真实的 是否有可能影响精度的配置选项(即:兼容模式)?

    3 回复  |  直到 15 年前
        1
  •  8
  •   AakashM    15 年前

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

    对于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)
    

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

        2
  •  1
  •   David M    15 年前

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

        3
  •  1
  •   Gareth Saul    15 年前

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

    如果在float<1>to float<24>范围内指定了real或任何值,SQL Server将在内部使用float<24>。如果您使用浮动或浮动范围内的任何内容浮动<25>来浮动<53>(限制),则它使用浮动<53>,即所谓的双精度。

    SQL Server 2005中float的msdn文档如下: float and real (Transact-SQL)

    如果您有特定的精度需求,请使用十进制,它提供可配置的精度和比例: decimal and numeric (Transact-SQL)