MSDN говорит о точности и шкала десятичного умножения результата :
- Точность и масштаб результата имеют абсолютный максимум 38. Когда точность результата большечем 38, соответствующая шкала уменьшается, чтобы предотвратить усечение неотъемлемой части результата.
Итак, когда мы выполним это:
DECLARE @a DECIMAL(18,9)
DECLARE @b DECIMAL(19,9)
set @a = 1.123456789
set @b = 1
SELECT @a * @b
, результат будет 1.12345689000000000 (9 нулей), и мы увидим, что он не усекается, потому что 18 + 19 + 1 =38 (верхний предел).
Когда мы повышаем точность @a до 27, мы теряем все нули, и в результате получаем только 1.123456789.Далее мы продолжаем усечение и получаем округление результата.Например, повышение точности от @a до 28 приводит к 1.12345679 (8 цифр).
Интересно то, что в какой-то момент с точностью, равной 30, у нас будет 1.123457, и этот результат не изменится.дальше (перестает быть усеченным).
31, 32 и до 38 результатов одинаковы.Как это можно объяснить?