2011-11-25 35 views
4

我有以下代碼:精度,小數位數總和,除以..截斷

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 +最大(6,2 + 10 + 1)
  • 38 - 最大(6,13-​​)
  • 38 - 13

規模:

  • MAX(6中,S1 + P2 + 1)
  • MAX(6,2 + 10 + 1)
  • 最大值(6,13)

那麼爲什麼小數位被截斷?

+0

[T-SQL十進制分割精度](可能重複的HTTP ://stackoverflow.com/questions/423925/t-sql-decimal-division-accuracy) – gbn

回答

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

+0

而這裏http://stackoverflow.com/q/423925/27535 – gbn