문제는 비교적 간단합니다. 중간 결과가 큰 소수 인 3 개의 열을 계산해야하며 SQL Server에서 기본적으로 캐스트 / 변환에 관계없이 소수를 반올림하는 문제가 발생합니다.
예를 들어 1234/1233으로 간단한 나눗셈을 해봅시다. 계산기는 1,00081103000811을 생성합니다. 그러나 SQL Server 에서이 작업을 수행하면 다음과 같은 결과가 나타납니다.
-- Result: rounded at 1.000811000... with trailing zeroes up until the 37 precision
SELECT CAST(CAST(1234 AS DEC(38,34))/CAST(1233 AS DEC(38,34)) AS DEC(38,37))
-- Result: rounded at 1.000811
SELECT CONVERT(DECIMAL(38,32), 1234)/CONVERT(DECIMAL(38,32),1233)
-- Correct result at 1,00081103000811
-- But this requires the zeroes to be put in manually when you don't
-- even know the precision of the end result
SELECT 1234.0/1233.00000000000000
이 자동 반올림이 발생하는 이유는 무엇입니까? 그리고 테이블에 다양한 값이 포함될 수 있으므로 숫자 (int 또는 dec 부분)가 얼마나 큰지 알 수 없을 때 미친 듯이 긴 십진수 값을 계산하는 가장 좋은 방법은 무엇입니까?
감사!