본문 바로가기
Back/DB

[DB] DECIMAL

by 오엥?은 2023. 8. 25.
반응형

📌 DECIMAL

: decimal 은 큰 숫자를 처리할 때 사용한다. ( -10^38+1 ~ 10^38-1 )

 

✔️ decimal 을 주로 사용하는 데이터

1. 금액 및 가격 데이터 

- 통화 단위를 포함한 금액이나 가격 정보는 정확한 십진법 연산을 요구한다.

 DECIMAL은 화폐 값의 정확성을 유지하면서 연산을 수행할 수 있다.

2. 세금 및 환율 데이터

- 세금이나 할인율과 같은 비율은 소수점 아래의 정밀도를 필요로 한다.

 예를 들어, 5% 할인율을 정확히 표현하려면 소수점 아래 2자리의 정밀도가 필요하다.

3. 물리적 측정

- 무게, 길이, 부피와 같은 물리적 측정 값들도 정확한 연산을 위해 DECIMAL을 사용할 수 있다.

4. 비율 및 백분율

- 어떤 값이 전체에 대한 비율을 나타내는 경우 DECIMAL을 사용하여 정확한 계산을 수행할 수 있다.

 

반응형

 

✔️ decimal 을 사용하는 이유

: 부동 소수점(floating-point) 연산의 정확성 문제 때문

 

 부동 소수점은 이진법을 사용하여 실수를 표현하는 방식인데, 이진법으로 정확하게 표현할 수 없는 소수점 수들이 존재한다. 이는 때로 연산 시 소수점 아래의 값들이 정확하지 않게 되어 결과가 예상과 다를 수 있음을 의미한다. 이는 돈과 같은 정확한 금액을 다룰 때 큰 문제가 될 수 있다.

 

 예를 들어, 부동 소수점을 사용하여 0.1과 0.2를 더하면 0.3이 아닌 근사값이 나올 수 있다. 

 

 반면에 DECIMAL 데이터 타입은 고정 소수점을 사용하여 십진법으로 값을 저장한다. 이는 금융 계산과 같이 정확한 값이 필요한 상황에서 적합하다. DECIMAL은 정확한 소수점 위치를 유지하며, 계산을 할 때 소수점 아래의 정밀도를 보장한다. 따라서 돈과 같은 금액을 저장하고 다룰 때 소수점 연산의 정확성을 보장하기 위해 DECIMAL 데이터 타입을 사용하는 것이 좋다.

 

 

✔️ decimal 사용법

DECIMAL 데이터 타입은 사용자가 정확한 소수점 위치와 소수점 아래의 숫자 개수를 정의할 수 있다.

 

예를 들어,

DECIMAL(10, 2)은 총 10자리의 숫자를 표현하며, 소수점 아래에 2자리의 숫자를 가질 수 있다는 것을 의미한다.

 

1. 열 정의

CREATE TABLE transactions (
    transaction_id INT PRIMARY KEY,
    amount DECIMAL(10, 2)
);

위의 예시에서 amount 열은 최대 10자리의 숫자를 허용하며, 소수점 아래에 2자리의 숫자를 가질 수 있다.

 

2. 값 저장

INSERT INTO transactions (transaction_id, amount)
VALUES (1, 123.45);

위의 예시에서 123.45는 DECIMAL(10, 2)에 맞는 형식으로 저장된다.

 

3. 값 검색

SELECT transaction_id, amount
FROM transactions
WHERE amount > 100;

DECIMAL 값을 비교하거나 검색할 때도 정확한 십진법 연산을 통해 결과를 얻을 수 있다.

 

4.  연산

UPDATE transactions
SET amount = amount + 10.50
WHERE transaction_id = 1;

DECIMAL 값을 연산할 때도 소수점 아래의 정밀도가 유지되며, 정확한 결과가 나온다.

 

 

➕ 근데!! Java 에서는 사용법이 조금 다르다.

BigDecimal sum = value1.add(value2);      // 덧셈
BigDecimal difference = value1.subtract(value2); // 뺄셈
BigDecimal product = value1.multiply(value2);   // 곱셈
BigDecimal quotient = value1.divide(value2, BigDecimal.ROUND_HALF_UP);  // 나눗셈

 

 

 

반응형

'Back > DB' 카테고리의 다른 글

[DB] PostgreSQL 과 MariaDB 의 특징, 차이점  (5) 2023.07.18
[DB] 스프링 트랜잭션  (0) 2023.05.18
[DB] QueryDSL  (0) 2023.05.12
[DB] JPA  (0) 2023.05.12
[DB] MyBatis  (0) 2023.05.09