Точность, Масштаб, Сумма, Разделить .. Усечение - PullRequest
4 голосов
/ 25 ноября 2011

У меня есть следующий код:

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 и 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 Ответ

4 голосов
/ 25 ноября 2011

Ваша работа не так

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, поэтому вы получаете усечение , как описано здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...