문제

SQLSERVER 2005를 사용하는 이유를 아는 사람이 있습니까?

SELECT CONVERT(DECIMAL(30,15),146804871.212533)/CONVERT(DECIMAL (38,9),12499999.9999)

11.74438969709659,

그러나 분모의 소수점을 15로 늘리면 덜 정확한 답변을 얻습니다.

SELECT CONVERT(DECIMAL(30,15),146804871.212533)/CONVERT(DECIMAL (38,15),12499999.9999)

11.74438969를주세요

도움이 되었습니까?

해결책

곱하기를 위해 우리는 각 인수의 소수점 이하 자리를 추가하여 (펜과 종이 사용) Dec 장소를 해결합니다.

그러나 사단은 머리를 날려 버립니다. 나는 지금 거짓말을하겠다.

그러나 SQL 용어로는 그렇습니다 정확히 예상대로.

--Precision = p1 - s1 + s2 + max(6, s1 + p2 + 1)
--Scale = max(6, s1 + p2 + 1)

--Scale = 15 + 38 + 1 = 54
--Precision = 30 - 15 + 9 + 54 = 72
--Max P = 38, P & S are linked, so (72,54) -> (38,20)
--So, we have 38,20 output (but we don use 20 d.p. for this sum) = 11.74438969709659
SELECT CONVERT(DECIMAL(30,15),146804871.212533)/CONVERT(DECIMAL (38,9),12499999.9999)


--Scale = 15 + 38 + 1 = 54
--Precision = 30 - 15 + 15 + 54 = 84
--Max P = 38, P & S are linked, so (84,54) -> (38,8)
--So, we have 38,8 output = 11.74438969
SELECT CONVERT(DECIMAL(30,15),146804871.212533)/CONVERT(DECIMAL (38,15),12499999.9999)

팔로우하면 동일한 수학을 할 수 있습니다 이 규칙 또한 각 숫자 쌍을 처리하는 경우

  • 146804871.212533000000000 및 1249999.99900000
  • 146804871.212533000000000 및 1249999.99900000000000

다른 팁

곧 말하면 10 진수 (25,13)를 사용하면 모든 계산에서는 괜찮을 것입니다. 선언 된대로 정밀도를 얻을 수 있습니다. 10 자리 숫자 앞에 12 자리, 후 13 자리 숫자. 규칙은 : P+S는 38과 같아야하며 안전한 편에있을 것입니다! 왜 이런거야? SQL Server에서 산술 구현이 매우 잘못 되었기 때문입니다! 그들이 고칠 때까지 그 규칙을 따르십시오.

나누기 값을 플로트에 던지면 정답을 제공한다는 것을 알았습니다.

select 49/30                   (result = 1)

될 것입니다 :

select 49/cast(30 as float)    (result = 1.63333333333333)

우리는 마법의 전환에 대한 수수께끼가 많았습니다.

P & S는 연결되어 있으므로 다음과 같습니다.

  1. (72,54) -> (38,29)

  2. (84,54) -> (38,8)

가정합니다 (38,29) 오타이고해야합니다 (38,20), 다음은 수학입니다.

  1. 나. 72-38 = 34, ii. 54-34 = 20

  2. 나. 84-58 = 46, ii. 54-46 = 8

그리고 이것은 추론입니다.

나. 출력 정밀 최대 정밀도는 우리가 버릴 숫자입니다.

II. 그런 다음 출력 스케일이 우리가 버릴 것이 적 으면 출력 스케일의 남은 숫자가 있습니다.

이것이 다른 사람이 이것을 이해하려고 노력하는 데 도움이되기를 바랍니다.

인수가 아닌 표현을 변환하십시오.

select  CONVERT(DECIMAL(38,36),146804871.212533 / 12499999.9999)

다음을 사용하면 도움이 될 수 있습니다.

SELECT COL1 * 1.0 / COL2
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top