FLOAT and DOUBLE PRECISION

<< Field | IBExpert Glossary | Forced writes >>

FLOAT and DOUBLE PRECISION

FLOAT data types are used to store values with significant decimals. The following FLOAT types are supported:

TypeSizeValue range
Float4 bytes7 significant decimals; -3.4 x 10^-38 to 3.4 x 10^38
Double Precision8 bytes15 significant decimals; -1.7 x 10^-308 to 1.7 x 10^308

A column with the defined data type FLOAT can store a single-precision figure with up to 7 significant decimals. The decimal point can float between all seven of these digits. If a number with more than 7 decimal places needs to be saved, decimals beyond the seventh position are truncated. FLOAT columns require 4 bytes of storage.

A column with the defined data type DOUBLE PRECISION can store numbers with 15 significant decimals. This uses 8 bytes of storage. As with the FLOAT column, the decimal point can float within the column. The DOUBLE PRECISION data type is implemented in the majority of InterBase platforms as a 64 bit number.

FLOAT types can be implemented for any calculative operations. They offer an optimal performance and sufficient range of values. It is possible to specify the display format of a FLOAT field under Environment Options / Grid / Display Formats.

The DOUBLE PRECISION data type can be written as follows:

 DOUBLE PRECISION
 DOUBLE

The main advantage of a DOUBLE PRECISION data type is the large number of decimal places e.g. 1/3 in DOUBLE PRECISION would be 0,33333333333333 in NUMERIC(18,4) it would be 0,3333. Please note: up until dialect 1 NUMERIC and DOUBLE PRECISION were identical i.e. an SQL with the data type NUMERIC(15,2) results in the following:

Result with dialect 1:

 CREATE TABLE TEST(WERT NUMERIC(15,2));
 INSERT INTO TEST(WERT) VALUES(100);
 SELECT * FROM TEST;  result 100
 UPDATE TEST SET WERT=WERT/3;
 SELECT * FROM TEST;  result 33,33
 UPDATE TEST SET WERT=WERT*3;
 SELECT * FROM TEST;  result 100

Result with dialect 3:

 CREATE TABLE TEST(WERT NUMERIC(15,2));
 INSERT INTO TEST(WERT) VALUES(100);
 SELECT * FROM TEST;  result 100
 UPDATE TEST SET WERT=WERT/3;
 SELECT * FROM TEST;  result 33,33
 UPDATE TEST SET WERT=WERT*3;
 SELECT * FROM TEST;  result 99,99

Since dialect 3 NUMERIC data is rounded according to commercial rounding rules; up to dialect 1 NUMERIC data is rounded according to technical rounding rules.

See also:
Table Editor
SQL Editor
Data types and subtypes
Selecting the right data type to improve database performance
Firebird 2.5 Language Reference Update
Firebird 2.1 Language Reference Update
Firebird 2.0 Language Reference Update
SQL Language Reference

back to top of page
<< Field | IBExpert Glossary | Forced writes >>