📌 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 |