floating_to_decimal(3
U)
NIX System V(BSD Compatibility Packaf
ge
l)
oating_to_decimal(3)
NAME
floatingtodecimal: singletodecimal, doubletodecimal,
extendedtodecimal - convert floating-point value to decimal record
SYNOPSIS
cc [ flag. . . ] file . . . -lucb
#include <floatingpoint.h>
void singletodecimal(px, pm, pd, ps)
single *px ;
decimalmode *pm;
decimalrecord *pd;
fpexceptionfieldtype *ps;
void doubletodecimal(px, pm, pd, ps)
double *px ;
decimalmode *pm;
decimalrecord *pd;
fpexceptionfieldtype *ps;
void extendedtodecimal(px, pm, pd, ps)
extended *px ;
decimalmode *pm;
decimalrecord *pd;
fpexceptionfieldtype *ps;
DESCRIPTION
The floatingtodecimal functions convert the floating-point value at *px
into a decimal record at *pd, observing the modes specified in *pm and
setting exceptions in *ps. If there are no IEEE exceptions, *ps will be
zero.
If *px is zero, infinity, or NaN, then only pd->sign and pd->fpclass are
set. Otherwise pd->exponent and pd->ds are also set so that
(pd->sign)*(pd->ds)*10**(pd->exponent)
is a correctly rounded approximation to *px. pd->ds has at least one and
no more than
DECIMALSTRINGLENGTH-1 significant digits because one character is used
to terminate the string with a NULL.
pd->ds is correctly rounded according to the IEEE rounding modes in pm-
>rd. *ps has fp_inexact set if the result was inexact, and has
fp_overflow set if the string result does not fit in pd->ds because of
the limitation DECIMALSTRINGLENGTH.
If pm->df==floating_form, then pd->ds always contains pm->ndigits
significant digits. Thus if *px == 12.34 and pm->ndigits == 8, then pd-
>ds will contain 12340000 and pd->exponent will contain -6.
10/89 Page 1
floating_to_decimal(3
U)
NIX System V(BSD Compatibility Packaf
ge
l)
oating_to_decimal(3)
If pm->df==fixed_form and pm->ndigits >= 0, then pd->ds always contains
pm->ndigits after the point and as many digits as necessary before the
point. Since the latter is not known in advance, the total number of
digits required is returned in pd->ndigits; if that number >=
DECIMALSTRINGLENGTH, then ds is undefined. pd->exponent always gets
-pm->ndigits. Thus if *px == 12.34 and pm->ndigits == 1, then pd->ds
gets 123, pd->exponent gets -1, and pd->ndigits gets 3.
If pm->df==fixed_form and pm->ndigits < 0, then pm->ds always contains
-pm->ndigits trailing zeros; in other words, rounding occurs -pm->ndigits
to the left of the decimal point, but the digits rounded away are
retained as zeros. The total number of digits required is in pd-
>ndigits. pd->exponent always gets 0. Thus if *px == 12.34 and pm-
>ndigits == -1, then pd->ds gets 10, pd->exponent gets 0, and pd->ndigits
gets 2.
pd->more is not used.
econvert(3), fconvert, gconvert, printf(3S), and sprintf, all use
doubletodecimal.
SEE ALSO
econvert(3)
printf(3S) in the Programmer's Reference Manual
Page 2 10/89