The decimal structure
Use the decimal data type to declare host variables for database values of type DECIMAL.
A structure of type decimal represents a value
in a decimal host variable, as follows:
#define DECSIZE 16
struct decimal
{
short dec_exp;
short dec_pos;
short dec_ndgts;
char dec_dgts[DECSIZE];
};
typedef struct decimal dec_t;
The decimal.h header
file contains the decimal structure and the typedef dec_t.
Include this file in all C source files that use any decimal host
variables with the following include directive:
EXEC SQL include decimal;
The decimal structure stores the number in pairs
of digits. Each pair is a number in the range 00 - 99. (Therefore,
you can think of a pair as a base-100 digit.) The following table
shows the four parts of the decimal structure.
Field | Description |
---|---|
dec_exp | The exponent of the normalized decimal type number. The normalized form of this number has the decimal point at the left of the left-most digit. This exponent represents the number of digit pairs to count from the left to position the decimal point (or as a power of 100 for the number of base-100 numbers). |
dec_pos | The sign of the decimal type number.
The dec_pos field can assume any one of the following three
values:
|
dec_ndgts | The number of digit pairs (number of base-100 significant digits) in the decimal type number. This value is also the number of entries in the dec_dgts array. |
dec_dgts[] | A character array that holds the significant digits
of the normalized decimal type number, assuming dec_dgts[0] ! =
0. Each byte in the array contains the next significant base-100 digit in the decimal type number, proceeding from dec_dgts[0] to dec_dgts[dec_ndgts]. |
The following table shows some sample decimal values.
Value | dec_exp | dec_pos | dec_ndgts | dec_dgts[] |
---|---|---|---|---|
-12345.6789 | 3 | 0 | 5 | dec_dgts[0] = 01 |
1234.567 | 2 | 1 | 4 | dec_dgts[0] = 12 |
-123.456 | 2 | 0 | 4 | dec_dgts[0] = 01 |
480 | 2 | 1 | 2 | dec_dgts[0] = 04 |
.152 | 0 | 1 | 2 | dec_dgts[0] = 15 |
-6 | 1 | 0 | 1 | dec_dgts[0] = 06 |
You can use the deccvasc demonstration program to experiment with how stores decimal numbers.