加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql-server-2005 – SQL Server:使用数字文字计算

发布时间:2020-12-12 08:55:17 所属栏目:MsSql教程 来源:网络整理
导读:我用浮点计算做了一些测试,以最小化精度损失.我偶然发现我想在这里展示的一个现象,希望得到一个解释. 当我写 print 1.0 / (1.0 / 60.0) 结果是 60.0024000960 当我写相同的公式并做明确的转换为浮动 print cast(1.0 as float) / (cast(1.0 as float) / cast(6
我用浮点计算做了一些测试,以最小化精度损失.我偶然发现我想在这里展示的一个现象,希望得到一个解释.

当我写

print 1.0 / (1.0 / 60.0)

结果是

60.0024000960

当我写相同的公式并做明确的转换为浮动

print cast(1.0 as float) / (cast(1.0 as float) / cast(60.0 as float))

结果是

60

到目前为止,我认为具有小数位的数字文字会被自动处理为具有适当精度的浮点值.铸造到真实显示与铸造浮动相同的结果.

>有没有关于SQL Server如何评估数字文字的文档?
>哪些数据类型是这些文字?
>我真的要把它们漂浮得更好的精度(对我来说听起来好像是讽刺的)?
>有没有比使用演员混合我的公式更容易的方法?

解决方法

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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读