计算时sql的额外精度,为什么?

hec6srdp  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(261)

你知道为什么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?

bihw5rsg

bihw5rsg1#

SQLServer提供了有关各种算术运算的数值精度和小数位数的详细文档。
对于乘法,这是:

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

我认为这些都符合算术的规则。小数点右边的小数位确实是 s1 + s2 --记住,比例是右边的数字。我认为精度可能被夸大了1。但是,在某些情况下,额外的小数位可能会有所帮助。
当然,对于数字/十进制值,这些值的上限是最大刻度和精度。

相关问题