FixedPoint Data Types
Fixedpoint data types ensure the predictability of multiplication and division operations, making them the choice for storing monetary values.Firebird implements two fixedpoint data types: NUMERIC
and DECIMAL
.
According to the SQL standard, both types limit the stored number to the declared scale (the number of digits after the decimal point).The standard defines different treatment of the precision for each type: precision for NUMERIC
columns is exactly “as declared”, while DECIMAL
columns accepts numbers whose precision is at least equal to what was declared.
Note

The behaviour of both 
For instance, NUMERIC(4, 2)
defines a number consisting altogether of four digits, including two digits after the decimal point;that is, it can have up to two digits before the point^{[1]}] and no more than two digits after the point.If the number 3.1415 is written to a column with this data type definition, the value of 3.14 will be saved in the NUMERIC(4, 2)
column.
The form of declaration for fixedpoint data, for instance, NUMERIC(p, s)
, is common to both types.The s
argument in this template is scale.Understanding the mechanism for storing and retrieving fixedpoint data should help to visualise why: for storage, the number is multiplied by 10^{s} (10 to the power of s
), converting it to an integer;when read, the integer is converted back by multiplying by 10^{s} (or, dividing by 10^{s}).
The method of storing fixedpoint data in the database depends on several factors: declared precision, database dialect, declaration type.
Precision  Data type  Dialect 1  Dialect 3 

1  4 



1  4 



5  9 



10  18 



19  38 



Note

Numerics with precision less than 19 digits use For complex calculations, those digits are cast internally to DECFLOAT(34).The result of various mathematical operations, such as 