不同精度的SQL Server数字



sql server中numeric(30,10)numeric(20,10)的区别是什么?为什么会这样3.456/2.8的结果为第一种情况下的1.2342857100,第二种情况下的1.2342857143

numeric(30,10)是精度为30,尺度为10的numeric,后者精度为20,尺度为10。对于前者,这意味着值可以包含30位数字,其中10位在小数点之后。后者最多为20位,其中小数点后有10位。

至于为什么它们给出不同的值,这些都在Precision、scale和Length (Transact-SQL)中解释了,其中计算得到的scale和Precision的方法如下:

tbody> <<tr>
运算 结果精度 结果尺度*
e1和e2max (s1, s2) +马克斯(p1-s1 p2-s2) + 1max (s1, s2)
e1, e2max (s1, s2) +马克斯(p1-s1 p2-s2) + 1max (s1, s2)
e1 * e2p1 + p + 1道明>
e1和e2p1 - s1 + s2 +马克斯(6,s1 + p + 1)max (6, s1 + p + 1)
e1除了/相交}{联盟/e2max (s1, s2) +马克斯(p1-s1 p2-s2)max (s1, s2)
e1 % e2最小(p1-s1 p2 s2) +最大(s1, s2)max (s1, s2)

SQL Server有非常详细的规则,说明了算术运算符对比例和精度的影响。对于加法和减法,它非常简单。

对于除法,逻辑是…更复杂。

原因是精度是由这个公式设置的:p1 - s1 + s2 + max(6, s1 + p2 + 1)。老实说,我不知道他们是怎么得到这个公式的,但这就是为什么精度是这样的。

假设您定义了一个列为numeric(30,10),这意味着精度p为30,比例s为10。

这是背后的逻辑:p1 - s1 + s2 + max(6, s1 + p2 + 1)

相关内容

  • 没有找到相关文章

最新更新