Способ работы SQL сервера в случае умножения и деления десятичных чисел различен, следовательно, разница в количестве цифр:
Предполагается, e1=decimal(p1,s1) and e2=decimal(p2,s2)
Operation Result precision Result scale *
e1 + e2 max(s1, s2) + max(p1-s1, p2-s2) + 1 max(s1, s2)
e1 - e2 max(s1, s2) + max(p1-s1, p2-s2) + 1 max(s1, s2)
e1 * e2 p1 + p2 + 1 s1 + s2
e1 / e2 p1 - s1 + s2 + max(6, s1 + p2 + 1) max(6, s1 + p2 + 1)
Точность и масштаб результата имеют абсолютный максимум 38. Когда точность результата превышает 38, соответствующая шкала уменьшается, чтобы предотвратить усечение неотъемлемой части результата.
Из-за этого, когда вы умножая 38 десятичных знаков точности, результат становится усеченным. Вы можете использовать следующий расчет, чтобы получить лучшие результаты:
select cast(1.225114854 as decimal(15,9))*cast(1.000000000 as decimal(15,9)) as multiply
select cast(1.225114854 as decimal(15,9))/cast(1.000000000 as decimal(15,9)) as division
Следующая ссылка должна прояснить большинство ваших сомнений:
https://www.codeproject.com/Articles/769823/Losing-Precision-After-Multiplication-in-SQL-Serve