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

tsql – T-SQL小数精度

发布时间:2020-12-12 16:12:10 所属栏目:MsSql教程 来源:网络整理
导读:有人知道为什么使用SQLServer 2005 SELECT CONVERT(DECIMAL(30,15),146804871.212533)/CONVERT(DECIMAL (38,9),12499999.9999) 给我11.74438969709659, 但是当我将分母上的小数位数增加到15时,我得到的答案不太准确: SELECT CONVERT(DECIMAL(30,12499999.999
有人知道为什么使用SQLServer 2005
SELECT CONVERT(DECIMAL(30,15),146804871.212533)/CONVERT(DECIMAL (38,9),12499999.9999)

给我11.74438969709659,

但是当我将分母上的小数位数增加到15时,我得到的答案不太准确:

SELECT CONVERT(DECIMAL(30,12499999.9999)

给我11.74438969

解决方法

对于乘法,我们只需在每个参数中加入小数位数(使用笔和纸)来计算输出分数.

但分裂只是把你的头分开.我现在要躺下.

在SQL术语中,它是exactly as expected.

--Precision = p1 - s1 + s2 + max(6,s1 + p2 + 1)
--Scale = max(6,s1 + p2 + 1)

--Scale = 15 + 38 + 1 = 54
--Precision = 30 - 15 + 9 + 54 = 72
--Max P = 38,P & S are linked,so (72,54) -> (38,20)
--So,we have 38,20 output (but we don use 20 d.p. for this sum) = 11.74438969709659
SELECT CONVERT(DECIMAL(30,12499999.9999)


--Scale = 15 + 38 + 1 = 54
--Precision = 30 - 15 + 15 + 54 = 84
--Max P = 38,so (84,8)
--So,8 output = 11.74438969
SELECT CONVERT(DECIMAL(30,12499999.9999)

如果您将每个数字对视为,您也可以按照this rule进行相同的数学计算

> 146804871.212533000000000和12499999.999900000> 146804871.212533000000000和12499999.999900000000000

(编辑:李大同)

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

    推荐文章
      热点阅读