Updated: 7 Jun 2005

Index Return to Main Contents

#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*);

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()**.

See **attributes**(5) for descriptions of the following attributes:

ATTRIBUTE TYPE | ATTRIBUTE VALUE |

MT-Level | MT-Safe |

**econvert**(3C), **fconvert**(3C), **gconvert**(3C), **printf**(3C), **sprintf**(3C), **attributes**(5)

- NAME
- SYNOPSIS
- DESCRIPTION
- ATTRIBUTES
- SEE ALSO

This document was created by man2html, using the manual pages.

Time: 02:37:18 GMT, October 02, 2010