일부 재무 관련 SQL 코드를 디버깅 할 때 수치 (24,8) 수학 정밀도에 이상한 문제가 있음을 발견했습니다. 당신이 A +에서 B * C를 발현 결과가 0.123457SQL 서버 2005 숫자 정밀도 손실
SELECT A, B, C, A + B * C FROM ( SELECT CAST로 얻을 것이다 당신의 MSSQL에서 다음 쿼리를 실행
(0.12345678 AS NUMERIC (24,8)) A, C AS (NUMERIC (24,8) AS 500) B AS, CAST (NUMERIC (24,8) AS 0) CAST) T
AS그래서 우리는 2 개의 중요한 상징을 잃었다. 이것을 여러 가지 방법으로 고정 시키려고 노력하면 중간 곱셈 결과 (0이된다!)를 numeric (24,8)으로 변환하면 문제가 없다.
마지막으로 해결책이 있습니다. 그러나 여전히 질문이 있습니다. 왜 MSSQL이 이런 식으로 동작하고 실제로 어떤 유형 변환이 샘플에서 발생 했습니까?
너는 NUMERIC (32,6)을 의미합니까?) ?? 합계가 38 – Edmondo1984
@ Edmondo1984 인 경우 링크를 읽고 두 숫자의 의미를 이해하십시오. –
두 개의 숫자 (24,8)를 곱하면 서버가 16 비트를 저장하고 (32,6)을 생성하려고 시도 할 것입니다. 어떻게하면 38,6이 될까요?Thanks – Edmondo1984