FLOATING_TO_DECIMAL(3C) Standard C Library Functions FLOATING_TO_DECIMAL(3C)

NAME


floating_to_decimal, single_to_decimal, double_to_decimal,
extended_to_decimal, quadruple_to_decimal - convert floating-point value
to decimal record

SYNOPSIS


#include <floatingpoint.h>

void single_to_decimal(single *px, decimal_mode *pm,
decimal_record *pd, fp_exception_field_type *ps);


void double_to_decimal(double *px, decimal_mode *pm,
decimal_record *pd, fp_exception_field_type *ps);


void extended_to_decimal(extended *px, decimal_mode *pm,
decimal_record *pd, fp_exception_field_type *ps);


void quadruple_to_decimal(quadruple *px, decimal_mode *pm,
decimal_record *pd, fp_exception_field_type *ps);


DESCRIPTION


The floating_to_decimal 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

(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 DECIMAL_STRING_LENGTH-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 DECIMAL_STRING_LENGTH.


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.


If pm->df == fixed_form 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 == fixed_form 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 == fixed_form and the value to be converted is large enough
that the resulting string would contain more than
DECIMAL_STRING_LENGTH-1 digits, then the string placed in pd->ds is
limited to exactly DECIMAL_STRING_LENGTH-1 digits (by moving the place at
which the value is rounded further left if need be), pd->exponent is
adjusted accordingly 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 double_to_decimal().

ATTRIBUTES


See attributes(7) for descriptions of the following attributes:


+---------------+-----------------+
|ATTRIBUTE TYPE | ATTRIBUTE VALUE |
+---------------+-----------------+
|MT-Level | MT-Safe |
+---------------+-----------------+

SEE ALSO


econvert(3C), fconvert(3C), gconvert(3C), printf(3C), sprintf(3C),
attributes(7)

illumos June 7, 2005 FLOATING_TO_DECIMAL(3C)