sql-server 찾기 SQL Server 'MONEY'데이터 형식이 10 진수 부동 소수점 또는 2 진 부동 소수점입니까?



소수점 0 없애기 (3)

SQL Server 'MONEY'데이터 형식이 10 진수 부동 소수점 또는 2 진 부동 소수점인지 여부를 거부하거나 확인하는 항목을 찾을 수 없습니다.

설명에서 MONEY 유형 범위는 -2 ^ 63에서 2 ^ 63-1까지이므로이 유형은 이진 부동 소수점이어야 함을 의미합니다.

하지만 이 페이지 에는 돈을 "정확한"숫자로 표시합니다. MONEY가 10 진수 부동 소수점 일 수 있다고 제안하는 유형 (그렇지 않은 경우 정확한 방법 또는 정확한 값의 정의는 무엇입니까?)

그런 다음 MONEY가 10 진수 부동 소수점이면 MONEY와 DECIMAL (19,4)의 차이점은 무엇입니까?


기본 차이점은 필요한 저장 공간이라고 생각합니다.

DECIMAL(19,4) 는 9 바이트를 필요로합니다.

MONEY 이 8 바이트를 필요로합니다


차이점을 확인하려면 설명서를 참조하십시오.

money 위한 서류 :

Data type  Range                                                 Storage
money      -922,337,203,685,477.5808 to 922,337,203,685,477.5807 8 bytes
smallmoney -214,748.3648 to 214,748.3647                         4 bytes

money 및 smallmoney 데이터 유형은 표현하는 화폐 단위의 10,000 분의 1까지 정확합니다.

decimal 비교 :

최대 정밀도가 사용되면 유효한 값은 -10 ^ 38 + 1에서 10 ^ 38-1까지입니다.

Precision    Storage
1 - 9        5 bytes
10 - 19      9 bytes
20 - 28      13 bytes
29 - 38      17 bytes

그래서 그것들은 정확히 똑같지는 않으며 단지 비슷합니다. DECIMAL (19,4)의 범위는 MONEY보다 약간 크며 (-10 ^ 15 + 0.0001 ~ 10 ^ 15 - 0.0001까지 저장할 수 있음) 하나 이상의 저장 영역 바이트가 필요합니다.

즉,이 작품 :

CREATE TABLE Table1 (test DECIMAL(19,4) NOT NULL);
INSERT INTO Table1 (test) VALUES
(999999999999999.9999);
SELECT * FROM Table1 

999999999999999.9999

하지만 그렇지 않습니다.

CREATE TABLE Table1 (test MONEY NOT NULL);
INSERT INTO Table1 (test) VALUES
(999999999999999.9999);
SELECT * FROM Table1 

Arithmetic overflow error converting numeric to data type money.

또한 의미 론적 차이가 있습니다. 화폐 가치를 저장하고 싶다면 돈을 사용하는 것이 좋습니다.


둘 다. 부동 소수점을 구현 한 경우 FLOAT 및 REAL 유형과 동일한 부정확성이 적용됩니다. 위키피디아의 부동 소수점 참조.

돈은 고정 소수점 유형입니다.

(-10 ^ 15 + 1 ~ 10 ^ 15-1)에 비해 작은 범위 (922,337,203,685,477.5808 ~ 922,337,203,685,477.5807)이므로 DECIMAL (19,4)보다 1 바이트 작습니다.





currency