unixdev.net


Switch to SpeakEasy.net DSL

The Modular Manual Browser

Home Page
Manual: (SunOS-4.1.3)
Page:
Section:
Apropos / Subsearch:
optional field

FLOATING_TO_DECIMAL(3)     Library Functions Manual     FLOATING_TO_DECIMAL(3)



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

SYNOPSIS
       #include <&lt;floatingpoint.h>&gt;

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

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

       void extended_to_decimal(px, pm, pd, ps)
       extended *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-&gt;sign and pd-&gt;fpclass
       are set.  Otherwise pd-&gt;exponent and pd-&gt;ds are also set so that

              (pd->&gt;sign)*(pd->&gt;ds)*10**(pd->&gt;exponent)

       is a correctly rounded approximation to *px.  pd-&gt;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 character.

       pd-&gt;ds is correctly rounded according to the  IEEE  rounding  modes  in
       pm-&gt;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-&gt;ds because  of
       the limitation DECIMAL_STRING_LENGTH.

       If  pm-&gt;df  ==  floating_form,  then pd-&gt;ds always contains pm-&gt;ndigits
       significant digits.  Thus if *px == 12.34 and pm-&gt;ndigits  ==  8,  then
       pd-&gt;ds will contain 12340000 and pd-&gt;exponent will contain -6.

       If  pm-&gt;df  == fixed_form and pm-&gt;ndigits >= 0, then pd-&gt;ds always con-
       tains pm-&gt;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-&gt;ndigits; if that number >=
       DECIMAL_STRING_LENGTH,  then ds is undefined.  pd-&gt;exponent always gets
       -pm-&gt;ndigits.  Thus if *px == 12.34 and pm-&gt;ndigits == 1,  then  pd-&gt;ds
       gets 123, pd-&gt;exponent gets -1, and pd-&gt;ndigits gets 3.

       If  pm-&gt;df  ==  fixed_form and pm-&gt;ndigits < 0, then pm-&gt;ds always con-
       tains -pm-&gt;ndigits trailing zeros;  in  other  words,  rounding  occurs
       -pm-&gt;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-&gt;ndigits.   pd-&gt;exponent  always  gets  0.  Thus if *px == 12.34 and
       pm-&gt;ndigits == -1, then  pd-&gt;ds  gets  10,  pd-&gt;exponent  gets  0,  and
       pd-&gt;ndigits gets 2.

       pd-&gt;more is not used.

       econvert(),  fconvert()  and gconvert() (see econvert(3)), and printf()
       and sprintf() (see printf(3V)) all use double_to_decimal().

SEE ALSO
       econvert(3), printf(3V)



                                23 October 1987         FLOATING_TO_DECIMAL(3)