精度,比例,总和,分割..截断

时间:2011-11-25 16:40:34

标签: sql-server sql-server-2005 tsql

我有以下代码:

SELECT -701385.10 -- -701385.10
SELECT SUM(-701385.10) -- -701385.10
SELECT -701385.10/2889991754.89 -- -0.000242694498630
SELECT SUM(-701385.10)/2889991754.89 -- -0.000242

在上一个SELECT中,结果被截断为6个小数位。我已经阅读了Precision, Scale, and Length文章,除非我的工作有误,否则我无法理解截断的原因。表达式SUM(-701385.10)的类型应为DECIMAL(38,2) - 请参阅SUM - 因此,该部门产生的类型应具有:

精确度:

  • p1 - s1 + s2 + max(6,s1 + p2 + 1)
  • 38 - 2 + 2 + max(6,2 + 10 + 1)
  • 38 - max(6,13)
  • 38 - 13
  • 25

规模:

  • max(6,s1 + p2 + 1)
  • max(6,2 + 10 + 1)
  • max(6,13)
  • 13

那么为什么小数位被截断?

1 个答案:

答案 0 :(得分:4)

你的工作是错的

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

给出

Precision: 38 - 2 + 2 + max(6, 2 + 12 + 1) = 53
Scale: max(6, 2 + 12 + 1)                  = 15

哪个大于38,因此您将截断as covered here