2011-01-29 10 views
122

필자는 MySQL의 DECIMAL을 이해할 수 없다. 00.0001에서 99.9999 사이의 숫자를 포함 할 수 있도록 행이 필요합니다. 어떻게 그렇게 작동하도록 구조화하겠습니까?MySQL DECIMAL을 사용하는 방법?

+8

* (참조) * http://dev.mysql.com/doc/refman/5.1/en/precision-math-decimal-changes.html –

+4

정답을 받아 들여야합니다. 현재 허용되는 답변이 잘못되었습니다. – Olhovsky

+2

여기에 끝나고 십진법이 허용되지 않는다고 주장하는 답변을 읽으십시오. 이에 대한 올바른 스펙은 아래의 신선한 대답을 참조하십시오. –

답변

344

DOUBLE 열은 DECIMAL 컬럼과 같은 하지, 그리고 당신이 금융 데이터 DOUBLE 열을 사용하는 경우 문제 드릴 것입니다.

실제로 DOUBLE은 FLOAT의 배정 밀도 (32 비트 대신 64 비트) 버전입니다. 부동 소수점 숫자는 real numbers의 대략적인 표현이며 정확하지 않습니다. 실제로 0.01과 같은 간단한 숫자는 FLOAT 또는 DOUBLE 유형에 정확한 표현이 없습니다.

DECIMAL 열은 정확한 표현이지만 훨씬 적은 수의 가능한 숫자 범위를 위해 더 많은 공간을 차지합니다. 당신은 당신이

CREATE TABLE your_table 
(
    your_column DECIMAL(6,4) NOT NULL 
); 

열 정의의 형식은 DECIMAL M이 자리의 최대 수입니다 (M, D)를 다음과 다음 문을 필요 질문처럼 99.9999 0.0001의 값을 보유 할 수있는 열을 만들려면 (정밀도) 및 D은 소수점 오른쪽 자리 숫자입니다 (눈금).

위의 명령은 -99.9999에서 99.9999 사이의 값을 허용하는 열을 생성한다는 것을 의미합니다. 또한 UNSIGNED DECIMAL 열을 0.0000에서 99.9999까지 만들 수 있습니다.

MySQL DECIMAL에 대한 자세한 내용은 official docs을 참조하십시오.

이 정보는 모두 MySQL 5.0.3 이상 버전에 적용됩니다. 이전 버전을 사용하고 있다면 업그레이드해야합니다.

+15

귀하의 답변에 투표했습니다. 당신의 대답은 정확하고, 다른 대답은 아닙니다 ("double = decimal"이라고 주장하기 때문에). DECIMAL은 정확한 값을 갖는 고정 소수점 유형이며 동의어는 숫자, 십진수 및 고정입니다. DOUBLE은 대략적인 숫자 데이터 값을 나타내는 부동 소수점 유형이므로, DOUBLE이 아 U니다. DECIMAL (<1-65>, <0-30>)을 사용할 때 첫 번째 매개 변수는 자릿수이고, 두 번째 매개 변수는 소수점 오른쪽 자릿수입니다. – Norbert

+2

네, 맞습니다. http://dev.mysql.com/doc/refman/5.1/en/precision-math-examples.html – ajreal

+0

@ajreal - MySQL 5.0.3 이후의 작업을 메모 해 두십시오. 이에 따라 답변을 수정 해 주시겠습니까? 미리 감사드립니다. – dezso

5

10 진수 데이터 형식의 경우 MySQL 5.x specificationDECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]입니다. 위의 대답은 부호없는 소수가 불가능하다는 말은 잘못되었습니다.

부호없는 소수 자릿수를 허용하는 필드를 정의하려면 총 길이가 6 자리이고 그 중 4 자리는 소수 자릿수이므로 DECIMAL (6,4) UNSIGNED을 사용하십시오.

마찬가지로 부호없는 (즉, 음수가 아닌) FLOAT 및 DOUBLE 데이터 유형을 생성 할 수 있습니다.

32

위의 답변은 정확하지만 간단한 설명만으로도 어떻게 작동하는지 알 수 있습니다.

열이 DECIMAL(13,4)으로 설정되었다고 가정합니다. 즉 열의 전체 크기는 13 자리이며이 중 4 개는 정밀도 표현에 사용됩니다.

그래서, 요약, 해당 열에 대한 당신의 최대 값을 가질 것이다 : 999999999,9999

7

이 코멘트에 올바른 솔루션,하지만 하나의 대답으로 그들을 요약 :

당신은 사용해야합니다 십진법 (6,4).

그런 다음 소수점 6 자릿수 (소수점 이하 2 자 및 4 자릿수)를 가질 수 있습니다. 적어도 this에 따르면.

+1

이것은이 개념을 완전히 이해하는 데 도움이되었습니다. 좋은 설명! –

관련 문제