SQL在计算时具有额外的精度,为什么?

SQL extra precision when calculating, why?

提问人:Alex 提问时间:6/4/2020 更新时间:6/4/2020 访问量:49

问:

你知道为什么SQL在乘法时增加了额外的精度吗?例:

declare @x decimal(2,1) = 9.9;
Declare @y decimal(3,2) = 9.99;
--precision: p1 + p2 + 1 = 2 + 3 + 1 = 6
--scale:     s1 + s2 = 1 + 2 = 3
declare @rM decimal(5,3) = @x * @y;--this is OK, why is the resulting precision 6 if 5 is OK?

有没有我不知道将两个值相乘需要 6 才能获得精度的场景?

SQL-Server-2008 精度

评论


答:

1赞 Gordon Linoff 6/4/2020 #1

SQL Server 提供了有关具有各种算术运算的数值精度和小数位数的详细文档

对于乘法,这是:

e1 * e2    precision:  p1 + p2 + 1    scale:  s1 + s2

我认为这些符合从算术中得出的规则。小数点右边的小数位数确实是——记住,小数位数是右边的数字。而且我认为精度可能被夸大了 1。 但是,在某些极端情况下,额外的小数位可能会有所帮助。s1 + s2

当然,这些值的上限为数值/十进制值的最大刻度和精度。