Floating-point Data Types
Go Up to Defining Numeric Data Types
InterBase provides two floating-point data types, FLOAT
and DOUBLE PRECISION
; the only difference is their size. FLOAT
specifies a single-precision, 32-bit data type with a precision of approximately 7 decimal digits. DOUBLE PRECISION
specifies a double-precision, 64-bit data type with a precision of approximately 15 decimal digits.
The precision of FLOAT
and DOUBLE PRECISION
is fixed by their size, but the scale is not, and you cannot control the formatting of the scale. With floating numeric data types, the placement of the decimal point can vary; the position of the decimal is allowed to “float.” For example, in the same column, one value could be stored as 25.33333, and another could be stored as 25.333.
Use floating-point numbers when you expect the placement of the decimal point to vary, and for applications where the data values have a very wide range, such as in scientific calculations.
If the value stored is outside of the range of the precision of the floating-point number, then it is stored only approximately, with its least-significant digits treated as zeros. For example, if the type is FLOAT
, you are limited to 7 digits of precision. If you insert a 10-digit number 25.33333312 into the column, it is stored as 25.33333.
The next statement creates a column, PERCENT_CHANGE
, using a DOUBLE
PRECISION
type:
CREATE TABLE SALARY_HISTORY
(. . .
PERCENT_CHANGE DOUBLE PRECISION
DEFAULT 0
NOT NULL
CHECK (PERCENT_CHANGE BETWEEN -50 AND 50),
. . .);
You can perform the following operations on FLOAT
and DOUBLE PRECISION
data types:
- Comparisons using the standard relational operators (=, <, >, >=, <=). Other operators such as
CONTAINING
,STARTING WITH
, andLIKE
perform string comparisons on the integer portion of floating data. - Arithmetic operations. The standard arithmetic operators determine the sum, difference, product, or dividend of two or more integers.
- Conversions. When performing arithmetic operations that involve mixed data types, InterBase automatically converts between
INTEGER
,FLOAT
, andCHAR
data types. For operations that involve comparisons of numeric data with other data types, such asCHARACTER
andINTEGER
, InterBase first converts the data to a numeric type, then compares them numerically. - Sorts. By default, a query retrieves rows in the exact order that it finds them in the table, which is likely to be unordered. Sort rows using the
ORDER BY
clause of aSELECT
statement in descending or ascending order.
The following CREATE TABLE
statement provides an example of how the different numeric types can be used: an INTEGER
for the total number of orders, a fixed DECIMAL
for the dollar value of total sales, and a FLOAT
for a discount rate applied to the sale.
CREATE TABLE SALES
(. . .
QTY_ORDERED INTEGER
DEFAULT 1
CHECK (QTY_ORDERED >= 1),
TOTAL_VALUE DECIMAL (9,2)
CHECK (TOTAL_VALUE >= 0),
DISCOUNT FLOAT
DEFAULT 0
CHECK (DISCOUNT >= 0 AND DISCOUNT <= 1));