Decimalリテラル

Decimalリテラルを定義するには、DECIMAL 'xxxxxxx.yyyyyyy' 構文を使用します。

リテラルのDecimal型の精度は、リテラル内の桁数(先頭および末尾のゼロを含む)に等しくなります。スケールは、小数部の桁数(末尾のゼロを含む)に等しくなります。

例文 データ型
DECIMAL '0' DECIMAL(1)
DECIMAL '12345' DECIMAL(5)
DECIMAL '0000012345.1234500000' DECIMAL(20, 10)

2進演算のDecimal演算子

標準的な数学演算子がサポートされています。以下の表は、結果の精度とスケールの計算ルールを説明しています。ここで、xDECIMAL(xp, xs)型であり、yDECIMAL(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 + max(0, ys-xs)) max(xs, ys)
x % y min(xp - xs, yp - ys) + max(xs, bs) max(xs, ys)

演算の数学的結果が結果データ型の精度とスケールで正確に表現できない場合、「値が範囲外です」という例外条件が発生します。

異なるスケールと精度を持つDecimal型で演算を行う場合、値はまず共通のスーパータイプに強制的に変換されます。最大表現可能精度(38)に近い型では、1つのオペランドが共通のスーパータイプに収まらない場合に「値が範囲外です」エラーが発生することがあります。例えば、decimal(38, 0) と decimal(38, 1) の共通スーパータイプは decimal(38, 1) ですが、decimal(38, 0) に収まる特定の値は decimal(38, 1) として表現できません。

比較演算子

すべての標準比較がDecimal型に対して機能します。

Unary decimal operators

-演算子は否定を行います。結果の型は引数の型と同じです。