MySQL의 DECIMAL을 파악할 수 없습니다. 00.0001에서 99.9999 사이의 숫자를 포함 할 수있는 행이 필요합니다. 어떻게 작동하도록 구성합니까?
답변
DOUBLE 열은 DECIMAL 열과 같지 않으므로 재무 데이터에 DOUBLE 열을 사용하면 문제가 발생 합니다.
DOUBLE은 실제로 FLOAT 의 배정도 (32 비트 대신 64 비트) 버전입니다 . 부동 소수점 숫자는 실수의 대략적인 표현이며 정확하지 않습니다. 실제로 0.01과 같은 간단한 숫자는 FLOAT 또는 DOUBLE 유형에서 정확하게 표현되지 않습니다.
DECIMAL 열은 정확한 표현이지만 훨씬 적은 수의 가능한 범위를 위해 더 많은 공간을 차지합니다. 0.0001에서 99.9999 사이의 값을 보유 할 수있는 열을 만들려면 다음 명령문이 필요합니다.
CREATE TABLE your_table
(
your_column DECIMAL(6,4) NOT NULL
);
열 정의는 DECIMAL (M, D) 형식을 따릅니다. 여기서 M 은 최대 자릿수 ( 정밀도 )이고 D 는 소수점 오른쪽에있는 자릿수 ( 스케일 )입니다.
이는 이전 명령이 -99.9999에서 99.9999 사이의 값을 허용하는 열을 작성 함을 의미합니다. 0.0000에서 99.9999 범위의 UNSIGNED DECIMAL 열을 만들 수도 있습니다.
MySQL DECIMAL에 대한 자세한 내용은 공식 문서 는 항상 훌륭한 자료입니다.
이 모든 정보는 MySQL 5.0.3 이상의 버전에 해당된다는 것을 명심하십시오. 이전 버전을 사용하는 경우 실제로 업그레이드해야합니다.
답변
위의 답변은 정확 해 보이지만 작동 방법에 대한 간단한 설명 만 제공하면됩니다.
열이로 설정되어 있다고 가정하십시오 DECIMAL(13,4)
. 즉, 열의 총 크기는 13 자리이며,이 중 4 개가 정밀 표현에 사용됩니다.
따라서 요약하면 해당 열의 최대 값은 다음과 같습니다. 999999999.9999
답변
의견에는 올바른 해결책이 있지만 단일 답변으로 요약하면 다음과 같습니다.
DECIMAL (6,4)을 사용해야합니다.
그런 다음 소수점 6 자리 (소수점 앞뒤 2 자리)를 총 6 자리로 지정할 수 있습니다. 에 따라 적어도 이 .
답변
십진 데이터 유형에 대한 MySQL 5.x 사양 은 다음과 같습니다 DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]
. 위의 대답은 부호없는 소수를 사용할 수 없다는 잘못된 말입니다.
부호없는 10 진수 만 허용하고 총 길이는 6 자리이며 그 중 4는 소수 인 필드를 정의하려면 다음을 사용 DECIMAL (6,4) UNSIGNED
합니다..
마찬가지로 부호없는 (즉, 음수가 아닌) FLOAT 및 DOUBLE 데이터 유형을 작성할 수 있습니다.