FLOATING_TO_DECIMAL(3C) Standard C Library Functions
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) June 7, 2005 FLOATING_TO_DECIMAL(3C)