Decimal 함수와 연산자
Decimal 함수와 연산자
정확한 십진수 계산을 위한 DECIMAL 타입의 리터럴, 산술 연산자, 비교 연산자에 대해 다뤄요.
출처: 문서
본문
Decimal 리터럴 (Decimal literals)
DECIMAL 'xxxxxxx.yyyyyyy' 문법으로 decimal 리터럴을 정의해요.
리터럴에 대한 decimal 타입의 정밀도(precision)는 리터럴의 자릿수(앞·뒤의 0 포함)와 같아요. 스케일(scale)은 소수부의 자릿수(뒤의 0 포함)와 같아요.
| 예시 리터럴 | 데이터 타입 |
|---|---|
DECIMAL '0' |
DECIMAL(1) |
DECIMAL '12345' |
DECIMAL(5) |
DECIMAL '0000012345.1234500000' |
DECIMAL(20, 10) |
이진 산술 decimal 연산자 (Binary arithmetic decimal operators)
표준 수학 연산자를 지원해요. 아래 표는 결과의 정밀도와 스케일 계산 규칙을 설명해요. x가 DECIMAL(xp, xs) 타입이고 y가 DECIMAL(yp, ys) 타입이라고 가정해요.
| 연산 | 결과 타입 정밀도 | 결과 타입 스케일 |
|---|---|---|
x + y and x - y |
min(38, 1 + max(xs, ys) + max(xp - xs, yp - ys)) |
max(xs, ys) |
x * y |
min(38, xp + yp) |
xs + ys |
x / y |
min(38, xp + ys-xs + max(0, ys-xs)) |
max(xs, ys) |
x % y |
min(xp - xs, yp - ys) + max(xs, bs) |
max(xs, ys) |
연산의 수학적 결과가 결과 데이터 타입의 정밀도와 스케일로 정확히 표현할 수 없다면, 예외 조건 Value is out of range가 발생해요.
스케일과 정밀도가 다른 decimal 타입끼리 연산할 때는 값들을 먼저 공통 슈퍼 타입(common super type)으로 강제 변환해요. 표현 가능한 최대 정밀도(38)에 가까운 타입에서는, 한 피연산자가 공통 슈퍼 타입에 맞지 않을 때 Value is out of range 오류가 발생할 수 있어요. 예를 들어 decimal(38, 0)과 decimal(38, 1)의 공통 슈퍼 타입은 decimal(38, 1)인데, decimal(38, 0)에 들어맞는 특정 값은 decimal(38, 1)로는 표현할 수 없어요.
비교 연산자 (Comparison operators)
모든 표준 비교 함수와 연산자는 decimal 타입에서 동작해요.
단항 decimal 연산자 (Unary decimal operators)
- 연산자는 부정(negation)을 수행해요. 결과 타입은 인자의 타입과 같아요.
더 알아보기 (Learn more)
비교 연산과 관련된 자세한 내용은 비교 함수 문서를 참고해 보세요.