문제

결과를 8 진수로 기록하고 싶기 때문에 돈 데이터 타입을 소수로 변환하고 싶습니다.

예를 들어, 통화 속도 테이블에서는 2871047428.20으로 저장된 비율이 돈 데이터 유형으로 보입니다. Microsoft SQL Management Studio를 사용하여 결과를 달성하기 위해 10000000으로 나누고 싶습니다. 287.10474282; 그러나 내가 실제로 얻는 결과는 287.1047입니다.

나는 4 진수 자리 만 얻는 이유는 그것이 돈 데이터 유형이기 때문에, 따라서 앞으로 나아가는 길은 이것을 소수 데이터 유형으로 변환하는 것이라고 생각합니다 ....

도움이 되었습니까?

해결책

여기서 비교 왼쪽 열 소수 값, 오른쪽 열 계산 된 돈 가치 :

DECLARE @money AS money
SET @money = 2871047428.20
SELECT CAST(@money AS decimal(34,4)) / 10000000, @money / 10000000

스택 오버플로에서도 여기를 참조하십시오.

다른 팁

Splattne의 대답은 두 가지 사소한 변경 사항을 제외하고는 거의 정확합니다.

DECLARE @money AS money
SET @money = 2871047428.20
SELECT CAST(@money AS decimal(34,6)) / 10000000.0, @money / 10000000.0

이것은 정답을 제시합니다 : 287.10474282. 내가 한 일은 정밀 값을 변경하고 ".0"을 부서 값에 추가하는 것입니다.

지금 나를 당황하게하는 유일한 것은 예상 소수점 (34,8) 대신 소수점 (34,6)으로 값을 시전해야한다는 사실입니다.

그래서 나는 다른 방식으로 쿼리를 썼는데, 그것은 나에게 더 의미가 있습니다.

DECLARE @money AS money
SET @money = 2871047428.20
SELECT CAST((@money / 10000000.0) AS decimal(34,8)), @money / 10000000.0

어느 것이 당신을 위해 일하는지보십시오.

당신은 모두 소수점 분열의 이상한 점을 맞이하고 있습니다. 또 다른 스레드, T-SQL 소수점 분할 정확도

그리고 당신은 또한 암시 적 플로트 변환을 가질 수 있습니다. 데이터 유형 우선 순위 100000000.0을 사용하는 경우

DECLARE @money AS money
SET @money = 2871047428.20
--Oddities
SELECT
    CAST(@money AS decimal(34,8)) / 10000000,
    CAST(@money AS decimal(34,8)) / 10000000.0,
    CAST(@money AS decimal(34,8)) / 10000000.00,
    CAST(@money AS decimal(34,8)) / 10000000.000,
    CAST(@money AS decimal(34,8)) / 10000000.0000
--Should be safe. My brain hurts if I work through p and s
SELECT
    CAST(@money AS decimal(38,8)) / CAST(10000000 AS decimal(8,0))
    SELECT CAST(currency_rate AS decimal) / 10000000 FROM ...
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top