Я работаю над проблемой, связанной со многими sql десятичными умножениями, используя довольно высокую точность.
Недавняя ошибка побудила меня провести некоторое исследование, и я натолкнулся на унизительную статью (http://msdn.microsoft.com/en-us/library/ms190476.aspx) о том, как вычисляются точность и масштаб десятичного результата.
Насколько я понимаю, чтобы избежать усечения или неожиданного округления, иногда необходимо приводить операнды и, возможно, промежуточные вычисления к размерам, которыебудет работать и давать желаемые результаты. Каждый операнд дается мне как десятичное число (19,5). Я ничего не могу с этим поделать, так как мы поддерживаем такой широкий диапазон значений.
Myвопрос : Могу ли я уменьшить / привести тип этих десятичных (19,5) значений «на лету» к наименьшему десятичному типу (точность и масштаб), который будет содержать значение?
Например, могу ли я привести эту переменную (@Cw) к десятичной (4,1) «на лету», прежде чем она будет использована в моем умножении?
DECLARE @Cw decimal(19,5)
SET @Cw = 113.5
--Some type of CAST, i.e.
--CAST(@Cw as DECIMAL(GetActualPrecision(@Cw), GetActualScale(@Cw)))
-–should show 4 instead of 19
SELECT SQL_VARIANT_PROPERTY(@NewCw, 'Precision')
–-should show 1 instead of 5
SELECT SQL_VARIANT_PROPERTY(@NewCw, 'Scale')
Спасибо!