Use these functions to manipulate decimal data type values. Using other functions may produce unpredictable results.
To add two decimal values
mint decadd(dec_t *n1, struct decimal *n2, struct decimal *n3);
0 The operation was
successful.
-1200 The operation resulted in overflow.
-1201 The operation resulted in underflow.
To subtract two decimal values
mint decsub(dec_t *n1, struct decimal *n2, struct decimal *n3);
0 The operation was
successful.
-1200 The operation resulted in overflow.
-1201 The operation resulted in underflow.
To multiply two decimal values
int decmul(dec_t *n1, struct decimal *n2, struct decimal *n3);
0 The operation was
successful.
-1200 The operation resulted in overflow.
-1201 The operation resulted in underflow.
To divide one decimal value by another(n1 divided by n2)
mint decdiv(dec_t *n1, struct decimal *n2, struct decimal *n3);
0 The operation was
successful.
-1200 The operation resulted in overflow.
-1201 The operation resulted in underflow.
-1202 The operation attempted to divide by zero.
To compare two decimal values
mint deccmp(dec_t *n1, struct decimal *n2);
-1
The first value is less than the second value.
0
The two values are identical.
1
The first value is greater than the second value.
DECUNKNOWN Either value is null.
To copy one decimal value to another
void deccopy(dec_t *n1, struct decimal *n2);
To convert a string value to a decimal
mint deccvasc(char *cp, mint len, dec_t *np);
0 The conversion was
successful.
-1200 The number is too large to fit into a decimal type structure
(overflow).
To convert a double value to a decimal
mint deccvdbl(double dbl, dec_t *np);
0 The conversion was successful.
<0 The conversion failed.
To convert an integer value to a decimal
mint deccvint(mint in, dec_t *np);
0 The conversion was successful.
<0 The conversion failed.
To convert a long integer value to a decimal
mint deccvlong(int4 lng, dec_t *np);
0 The conversion was successful.
<0 The conversion failed.
To convert a decimal value to a string value, specifying the length of the string (the total number of digits)
char *dececvt(dec_t *np, mint ndigit, mint *decpt, mint *sign);
To convert a decimal value to a string value, specifying the number of digits to the right of the decimal point
char *decfcvt(dec_t *np, mint ndigit, mint *decpt, mint *sign);
To round a decimal value, specifying the number of digits to the right of the decimal point
void decround(dec_t *np, mint dec_round);
To convert a decimal value to an ASCII string, specifying the length of the string and the number of digits to the right of the decimal point
mint dectoasc(dec_t *np, char *cp, mint len, mint right);
0 The conversion was successful.
-1 The conversion failed.
To convert a decimal value to a double value
mint dectodbl(dec_t *np, double *dblp);
Return code:
0 The conversion was successful.
<0 The conversion failed.
To convert a decimal value to an integer
mint dectoint(dec_t *np, mint *ip);
0 The conversion was
successful.
<0 The conversion failed.
-1200 The magnitude of the decimal type number is greater than 32767.
To convert a decimal value to a long integer
mint dectolong(dec_t *np, int4 *lngp);
0 The conversion was
successful.
-1200 The magnitude of the decimal type number is greater than 2,147,483,647.
To truncate a decimal value, specifying the number of digits to the right of the decimal point
void dectrunc(dec_t *np, mint trunc);
To convert a float to a decimal value
mint deccvflt(float source, dec_t *destination);
0 The conversion was successful.
<0 The conversion failed.
mint dectoflt(dec_t *source, float *destination);
0 The conversion was successful.
<0 The conversion failed.
To convert a decimal value to a string having a specified format
int rfmtdec(dec_t *dec, char *format, char *outbuf);
0 The conversion was
successful.
-1211 The program ran out of memory (memory-allocation error).
-1217 The format string is too large.
A numeric-formatting mask specifies a format to apply to some numeric value. This mask is a combination of the following formatting characters:
Character | Description |
* | This character fills with asterisks any positions in the display field that would otherwise be blank. |
& | This character fills with zeros any positions in the display field that would otherwise be blank. |
# | This character changes leading zeros to blanks. Use this character to specify the maximum leftward extent of a field. |
< | This character left-justifies the numbers in the display field. It changes leading zeros to a null string. |
, |
This character indicates the symbol that separates groups of three digits (counting leftward from the units position) in the whole-number part of the value. By default, this symbol is a comma. You can set the symbol with the DBMONEY environment variable. In a formatted number, this symbol appears only if the whole-number part of the value has four or more digits. |
. |
This character indicates the symbol that separates the whole-number part of a money value from the fractional part. By default, this symbol is a period. You can set the symbol with the DBMONEY environment variable. You can have only one period in a format string. |
- |
This character is a literal. It appears as a minus sign when the expression is less than zero. When you group several minus signs in a row, a single minus sign floats to the rightmost position that it can occupy; it does not interfere with the number and its currency symbol. |
+ |
This character is a literal. It appears as a plus sign when the expression is greater than or equal to zero and as a minus sign when expr1 is less than zero. When you group several plus signs in a row, a single plus or minus sign floats to the rightmost position that it can occupy; it does not interfere with the number and its currency symbol. |
( |
This character is a literal. It appears as a left parenthesis to the left of a negative number. It is one of the pair of accounting parentheses that replace a minus sign for a negative number. When you group several in a row, a single left parenthesis floats to the rightmost position that it can occupy; it does not interfere with the number and its currency symbol. |
) | This is one of the pair of accounting parentheses that replace a minus sign for a negative value. |
$ |
This character displays the currency symbol that appears at the front of the numeric value. By default, the currency symbol is the dollar sign ($). You can set the currency symbol with the DBMONEY environment variable. When you group several dollar signs in a row, a single currency symbol floats to the rightmost position that it can occupy; it does not interfere with the number. |
Any other characters in the formatting mask are reproduced literally in the result.
Mask | Numeric value | Formatted String |
-##,###.## |
-12345.67 12345.67 113.11 |
-12,234.67 b12,345.67 bbbb113.11 |
##,###.## |
-12345.67 12345.67 |
12,345.67 12,345.67 |
--,---.&& | -445.67 | bb-445.67 |
$$,$$$.&& |
2345.67 445.67 |
$2,345.67 bb$445.67 |