gpt4 book ai didi

sql-server-2005 - SQL Server : Calculation with numeric literals

转载 作者:行者123 更新时间:2023-12-04 03:14:10 26 4
gpt4 key购买 nike

我对浮点计算进行了一些测试,以最大程度地降低精度损失。我偶然发现了一个我想在这里展示的现象,并希望得到一个解释。

当我写

print 1.0 / (1.0 / 60.0)

结果是
60.0024000960

当我编写相同的公式并对 float进行显式转换时
print cast(1.0 as float) / (cast(1.0 as float) / cast(60.0 as float))

结果是
60

到目前为止,我认为带有小数位的数字文字会自动以适当的精度视为 float值。强制转换为 real显示与强制转换为 float相同的结果。
  • 是否有一些有关SQL Server如何评估数字文字的文档?
  • 这些文字是什么数据类型?
  • 我真的必须将它们强制转换为float以获得更好的精度(这对我来说听起来很讽刺:)?
  • 是否有比使用强制类型转换使公式困惑的方法更简单的方法?
  • 最佳答案

    SQL Server使用最小的数据类型。

    当您运行此脚本时

    SELECT SQL_VARIANT_PROPERTY(1.0, 'BaseType')
    SELECT SQL_VARIANT_PROPERTY(1.0, 'Precision')
    SELECT SQL_VARIANT_PROPERTY(1.0, 'Scale')
    SELECT SQL_VARIANT_PROPERTY(1.0, 'TotalBytes')

    您会看到SQL Server隐式使用了NUMERIC(2,1)数据类型。
    除以60.0会将结果转换为NUMERIC(8,6)。
    最终计算将结果转换为NUMERIC(17,10)。

    编辑

    取自SQL Server联机丛书 Data Type Conversion

    In Transact-SQL statements, a constant with a decimal point is automatically converted into a numeric data value, using the minimum precision and scale necessary. For example, the constant 12.345 is converted into a numeric value with a precision of 5 and a scale of 3.

    关于sql-server-2005 - SQL Server : Calculation with numeric literals,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1072806/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com