DECIMAL

DECIMAL provides an exact numeric in which the precision and scale can be arbitrarily sized. You can specify the precision (the total number of digits, both to the left and the right of the decimal point) and the scale (the number of digits of the fractional component). The amount of storage required is based on the precision.

Syntax

{ DECIMAL | DEC } [(precision [, scale ])]

The precision must be between 1 and 31. The scale must be less than or equal to the precision.

If the scale is not specified, the default scale is 0. If the precision is not specified, the default precision is 5.

An attempt to put a numeric value into a DECIMAL is allowed as long as any non-fractional precision is not lost. When truncating trailing digits from a DECIMAL value, Derby rounds down.

For example:
-- this cast loses only fractional precision
values cast (1.798765 AS decimal(5,2));
1
--------
1.79
-- this cast does not fit
values cast (1798765 AS decimal(5,2));
1
--------
ERROR 22003: The resulting value is outside the range 
for the data type DECIMAL/NUMERIC(5,2).

When mixed with other data types in expressions, the resulting data type follows the rules shown in Numeric type promotion in expressions.

See also Storing values of one numeric data type in columns of another numeric data type.

When two decimal values are mixed in an expression, the scale and precision of the resulting value follow the rules shown in Scale for decimal arithmetic.

Corresponding compile-time Java type

java.math.BigDecimal

JDBC metadata type (java.sql.Types)

DECIMAL

VALUES 123.456

VALUES 0.001

Integer constants too big for BIGINT are made DECIMAL constants.

Related concepts
Built-In type overview
Numeric types
Related reference
Data type assignments and comparison, sorting, and ordering
BIGINT
BLOB
CHAR
CHAR FOR BIT DATA
CLOB
DATE
DOUBLE
DOUBLE PRECISION
FLOAT
INTEGER
LONG VARCHAR
LONG VARCHAR FOR BIT DATA
NUMERIC
REAL
SMALLINT
TIME
TIMESTAMP
VARCHAR
VARCHAR FOR BIT DATA