본문 바로가기

데이터베이스/MariaDB

[DataBase]정확한 연산을 위해 소수 데이터를 저장할때! Decimal()자료형에 대한 설명과 활용

 

 

업무를 진행하면서 어렴풋이 기억나는 듯.. 하던 자료형을 마주했다. 

스케줄데이터를 남기는 DB인데, 순차적으로 증가하며 정확한 연산을 위한 데이터를 요하는 테이블이었다.

 


 

 

Mysql에서는 데이터를 저장하기 위한 다양한 자료형을 제공한다.  

크게 분류하면 

  1. 숫자 타입
  2. 문자열 타입
  3. 날짜와 시간타입

이번 포스팅에서는 숫자타입 중, 소수점을 표기할 수 있는 DECIMAL 타입을 소개한다. 

DECIMAL은 대부분의 관계형데이터 쿼리나 Java, Python, C++, C#과 같은 개발언어 등 범용적으로, 그리고 비슷한 활용으로서 사용되지만 언어에 따라 다소 차이가 있으니 유의해야 한다.

 

본 포스팅은 MARIADB을 기준으로 작성되었다 

 

 

고정 소수점 자료형 DECIMAL

DECIMAL은 고정 소수점 자료형으로 

다시 말해 소수점 자릿수를 미리 정해놓고 고정자릿수로 소수 부분까지 표현할 수 있는 자료형이다.

입력된 데이터에 따라 길이가 변하는 가변과 달리, 지정해 놓은 자릿수보다 짧은 자리의 소수가 들어오더라도 명기해 놓은 자릿수만큼 데이터가 표기된다. 

 

여기까지 이해가 어렵다면 문법을 먼저 살펴보자

 

문법

DECIMAL(N, D)
-N은 소수 부분을 포함한 실수의 총자릿수를 나타내며 최댓값은 65
-D는 소수점 이하의 자릿수를 의미, D가 0 일시 소수점 이하 자리를 포함하지 않는 정수 형태로 저장 

 

위의 설명으로 돌아가 DECIMAL(1,2)로 선언이 되어있는 칼럼에,

1.45 / 1.2 / 2 등의 데이터들이 들어온다고 했을 때

1.45 / 1.20 / 2.00의 형태로 데이터가 저장된다고 볼 수 있다. 

 

반대로 N자리에 DECIMAL( 3,0)으로 선언이 되어있는 칼럼이 있다고 할 때

1 / 10 / 100 등의 데이터가 들어온다고 가정했을 때

001 / 010 / 100 등의 데이터가 저장된다고 볼 수 있다. 

 


DECIMAL자료형의 장단점

 

장점

  • 정확한 숫자값을 계산할 수 있어 계산에 대한 오차가 발생하지 않는다.
  • 금액, 수량 등과 같은 정확한 값을 저장해야 하는 칼럼에 적합
  • 계산할 때의 속도가 빠르다
  • 큰 숫자 데이터를 저장하기에 용이하다

단점

  • 다른 숫자형 타입에 비해 저장공간이 크다는 단점이 있다.
  • 정수형 데이터에 비해 속도가 느리다.
  • 계산이 필요한 CPU자원이 많이 필요하다

 

 

DECIMAL타입의 활용

DECIMAL자료형은 정수형 자료형의 연산과정에서 오류가 발생하는 정수 오버플로우(Integer Overflow)가 발생하지 않기 때문에 아래와 같은 분야에 관련된 개발이나 데이터를 활용할 때 도움이 될 수 있다. 

  1. 정확한 연산이 필요한 금융분야에서 활용할 수 있다 
  2. 소수점 단위의 정확한 연산이 필요한 과학, 제조, 전자상거래등의 분야에서 활용될 수 있다.