#include "decimal.h" int lddecimal(cp, len, np) /* load a decimal */ char *cp; /* input: location of compacted format */ int len; /* input: length of compacted format */ dec_t *np; /* output: location of dec_t format */ void stdecimal(np, cp, len) /* store a decimal */ dec_t *np; /* input: location of dec_t format */ char *cp; /* output: location of compacted format */ int len; /* input: length of compacted format */ int deccmp(n1, n2) /* compare two decimal numbers */ dec_t *n1; /* input: number to be compared */ dec_t *n2; /* input: number to be compared */ int dectoasc(np, cp, len, right) /* convert dec_t to ascii */ dec_t *np; /* input: number to be converted */ char *cp; /* output: number after conversion */ int len; /* input: length of output string */ int right; /* input: number of places to right of decimal point */ int deccvasc(cp, len, np) /* convert ascii to dec_t */ char *cp; /* input: number to be converted */ int len; /* input: maximum length of number to be converted */ dec_t *np; /* output: number after conversion */ int dectoint(np, ip) /* convert int to dec_t */ dec_t *np; /* input: number to be converted */ int *ip; /* output: number after conversion */ int deccvint(in, np) /* convert dec_t to int */ int in; /* input: number to be converted */ dec_t *np; /* output: number after conversion */ int dectolong(np, lngp) /* convert dec_t to long */ dec_t *np; /* input: number to be converted */ long *lngp; /* output: number after conversion */ int deccvlong(lng, np) /* convert long to dec_t */ long lng; /* input: number to be converted */ dec_t *np; /* output: number after conversion */ int dectodbl(np, dblp) /* convert dec_t to double */ dec_t *np; /* input: number to be converted */ double *dblp; /* output: number after conversion */ int deccvdbl(dbl, np) /* convert double to dec_t */ double *dbl; /* input: number to be converted */ dec_t *np; /* output: number after conversion */ int dectoflt(np, fltp) /* convert dec_t to float */ dec_t *np; /* input: number to be converted */ float *fltp; /* output: number after conversion */ int deccvflt(flt, np) /* convert float to dec_t */ double *flt; /* input: number to be converted */ dec_t *np; /* output: number after conversion */ int decadd(*n1, *n2, *n3) /* add two decimal numbers */ dec_t *n1; /* input: addend */ dec_t *n2; /* input: addend */ dec_t *n3; /* output: sum */ int decsub(*n1, *n2, *n3) /* subtract two decimal numbers */ dec_t *n1; /* input: minuend */ dec_t *n2; /* input: subtrahend */ dec_t *n3; /* output: difference */ int decmul(*n1, *n2, *n3) /* multiply two decimal numbers */ dec_t *n1; /* input: multiplicand */ dec_t *n2; /* input: multiplicand */ dec_t *n3; /* output: product */ int decdiv(*n1, *n2, *n3) /* divide two decimal numbers */ dec_t *n1; /* input: dividend */ dec_t *n2; /* input: divisor */ dec_t *n3; /* output: quotient */
Decimals are represented on native System/T nodes using the dec_t structure. This definition of this structure is as follows:
#define DECSIZE 16 struct decimal { short dec_exp; /* exponent base 100 */ short dec_pos; /* sign: 1=pos, 0=neg, -1=null */ short dec_ndgts; /* number of significant digits */ char dec_dgts[DECSIZE]; /* actual digits base 100 */ }; typedef struct decimal dec_t;It should never be necessary for programmers to directly access the dec_t structure, but it is presented here nevertheless to give an understanding of the underlying data structure. If large amounts of decimal data need to be stored, the stdecimal() and lddecimal() functions may be used to obtain a more compact format. dectoasc(), dectoint(), dectolong(), dectodbl(), and dectoflt() allow the conversion of decimals to other data types. deccvasc(), deccvint(), deccvlong(), deccvdbl(), and deccvflt() allow the conversion of other data types to the decimal data type. deccmp() is the function which compares two decimals. It returns -1 if the first decimal is less than the second, 0 if the two decimals are equal, and 1 if the first decimal is greater than the second. A negative value other than -1 is returned if either of the arguments is invalid. decadd(), decsub(), decmul(), and decdiv() perform arithmetic operations on decimal numbers.
Unless otherwise stated, these functions return 0 on success and a negative value on error.