Если вы хотите что-то вроде decimal(38,16)
, тогда вам нужно привести данные, а не вывод после того, как усечение уже произошло!
SELECT CAST(6.71 AS DECIMAL(38,18))/3.41 AS NewNumber
Возвращает
1.9677419354838709
Проверьте тип данных
SELECT
SQL_VARIANT_PROPERTY(CAST(6.71 AS DECIMAL(38,18))/3.41, 'BaseType'),
SQL_VARIANT_PROPERTY(CAST(6.71 AS DECIMAL(38,18))/3.41, 'Precision'),
SQL_VARIANT_PROPERTY(CAST(6.71 AS DECIMAL(38,18))/3.41, 'Scale')
Возвращает
numeric 38 16
Редактировать
Это просто, чтобы добавить дополнительную ссылку, следуя за комментариями. Правила преобразования decimal
в decimal
описаны в BOL . Эта ссылка включает следующую фразу
* Точность и масштаб результата имеют абсолютный максимум 38. Когда
Точность результата больше 38,
соответствующая шкала сводится к
предотвратить неотъемлемую часть результата
от усечения.
, но не уточняется, как именно выполняется такое усечение. Это задокументировано здесь .