Standard C Library Functions floatingtodecimal(3C)
NAME
floatingtodecimal, singletodecimal, doubletodecimal,
extendedtodecimal, quadrupletodecimal - convert
floating-point value to decimal record
SYNOPSIS
#include
void singletodecimal(single *px, decimalmode *pm,
decimalrecord *pd, fpexceptionfieldtype *ps);
void doubletodecimal(double *px, decimalmode *pm,
decimalrecord *pd, fpexceptionfieldtype *ps);
void extendedtodecimal(extended *px, decimalmode *pm,
decimalrecord *pd, fpexceptionfieldtype *ps);
void quadrupletodecimal(quadruple *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 IE 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
(sig)*(pd->ds)*10**(pd->exponent)
is a correctly rounded approximation to *px, where sig is ]1
or -1, depending upon whether pd->sign is 0 or -1. pd->ds
has at least one and no more than DECIMALSTRINGLENGTH-1
significant digits because one character is used to ter-
minate the string with a null.
pd->ds is correctly rounded according to the IE rounding
modes in pm->rd. *ps has fpinexact set if the result was
inexact, and has fpoverflow set if the string result does
not fit in pd->ds because of the limitation
DECIMALSTRINGLENGTH.
SunOS 5.11 Last change: 7 Jun 2005 1
Standard C Library Functions floatingtodecimal(3C)
If pm->df == floatingform, 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.
If pm->df == fixedform and pm->ndigits >= 0, then the
decimal value is rounded at pm->ndigits digits to the right
of the decimal point. For example, if *px == 12.34 and
pm->ndigits == 1, then pd->ds will contain 123 and
pd->exponent will be set to -1.
If pm->df == fixedform and pm->ndigits< 0, then the decimal
value is rounded at -pm->ndigits digits to the left of the
decimal point, and pd->ds is padded with trailing zeros up
to the decimal point. For example, if *px == 12.34 and pm->n
digits == -1, then pd->ds will contain 10 and pd->exponent
will be set to 0.
When pm->df == fixedform and the value to be converted is
large enough that the resulting string would contain more
than DECIMALSTRINGLENGTH-1 digits, then the string placed
in pd->ds is limited to exactly DECIMALSTRINGLENGTH-1
digits (by moving the place at which the value is rounded
further left if need be), pd->exponent is adjusted accord-
ingly and the overflow flag is set in *ps.
pd->more is not used.
The econvert(3C), fconvert(3C), gconvert(3C), printf(3C),
and sprintf(3C) functions all use doubletodecimal().
ATRIBUTES
See attributes(5) for descriptions of the following attri-
butes:
ATRIBUTE TYPE ATRIBUTE VALUE
MT-Level MT-Safe
SEE ALSO
econvert(3C), fconvert(3C), gconvert(3C), printf(3C),
sprintf(3C), attributes(5)
SunOS 5.11 Last change: 7 Jun 2005 2
|