PostgreSQL에서 real, float, float8, double precision, numeric 타입은 모두 부동 소수점 숫자 또는 고정 소수점 숫자를 저장하는 데 사용됩니다. 각각의 차이점과 사용 방법, 그리고 활용 방안에 대해 알아보겠습니다.
데이터 타입 설명
- real
- 설명: 4바이트 단정밀도 부동 소수점 숫자.
- 정밀도: 약 6자리의 소수점 자릿수를 가짐.
- 범위: -3.4E+38 ~ +3.4E+38.
- 사용: 메모리가 제한적이고, 매우 높은 정밀도가 필요하지 않은 경우에 사용.
- float (또는 float8)
- 설명: 8바이트 배정밀도 부동 소수점 숫자. float8은 double precision의 별칭입니다.
- 정밀도: 약 15자리의 소수점 자릿수를 가짐.
- 범위: -1.7E+308 ~ +1.7E+308.
- 사용: 높은 정밀도가 필요한 경우에 사용.
- double precision
- 설명: 8바이트 배정밀도 부동 소수점 숫자.
- 정밀도: float와 동일, 약 15자리의 소수점 자릿수를 가짐.
- 범위: float와 동일, -1.7E+308 ~ +1.7E+308.
- 사용: 매우 높은 정밀도가 필요한 경우에 사용.
- numeric (또는 decimal)
- 설명: 가변 길이의 정확한 숫자. 소수점 이하 자릿수와 전체 자릿수를 지정할 수 있음.
- 정밀도: 사용자가 지정한 자릿수까지 정확함.
- 범위: 매우 넓음, 제한이 없다고 볼 수 있음.
- 사용: 금액 계산 등 매우 높은 정밀도가 요구되는 경우에 사용.
사용 방법과 예제
real
CREATE TABLE example_real ( id serial PRIMARY KEY, value real );
INSERT INTO example_real (value) VALUES (3.14), (2.71);
SELECT * FROM example_real;
float (float8), double precision
CREATE TABLE example_float ( id serial PRIMARY KEY, value float8 );
CREATE TABLE example_double_precision ( id serial PRIMARY KEY, value double precision );
INSERT INTO example_float (value) VALUES (3.141592653589793), (2.718281828459045);
INSERT INTO example_double_precision (value) VALUES (3.141592653589793), (2.718281828459045);
SELECT * FROM example_float; SELECT * FROM example_double_precision;
numeric (decimal)
CREATE TABLE example_numeric ( id serial PRIMARY KEY, value numeric(10, 2) );
INSERT INTO example_numeric (value) VALUES (12345.67), (98765.43);
SELECT * FROM example_numeric;
활용 방안
- real: 센서 데이터, 간단한 계산 등 정밀도가 크게 필요 없는 경우에 사용합니다.
- float (float8), double precision: 과학 계산, 통계 분석 등 높은 정밀도가 필요한 경우에 사용합니다. float8과 double precision은 동일한 타입이므로 동일한 용도로 사용됩니다.
- numeric (decimal): 금액, 금융 데이터 등 매우 높은 정밀도와 정확성이 필요한 경우에 사용합니다. 특히, 소수점 이하 자릿수가 중요한 경우 유용합니다.
요약
- real은 4바이트 단정밀도 부동 소수점으로, 정밀도가 크게 필요 없는 경우에 사용됩니다.
- float와 double precision은 8바이트 배정밀도 부동 소수점으로, 높은 정밀도가 필요한 경우에 사용됩니다.
- numeric은 고정 소수점으로, 정밀도가 매우 중요한 경우에 사용됩니다.
'개발라이프' 카테고리의 다른 글
node.js + typescript + express + typeorm + postgresql 개발환경 셋팅 (0) | 2024.08.02 |
---|---|
JavaScript의 옵셔널 체이닝 연산자 (Optional Chaining Operator) (0) | 2024.07.25 |
intellij - Cannot identify version of git executable: no response in 3 attempts (0) | 2023.04.27 |
Flutter Firebase App Check적용하기 (0) | 2023.04.20 |
flutter에서 클래스 멤버란? (0) | 2023.04.11 |