NAME | SYNOPSIS | DESCRIPTION | USAGE | ATTRIBUTES | SEE ALSO
#include <floatingpoint.h>char *econvert(double value, int ndigit, int *decpt, int *sign, char *buf);
The econvert() function converts the value to a null-terminated string of ndigit ASCII digits in buf and returns a pointer to buf . buf should contain at least ndigit+1 characters. The position of the decimal point relative to the beginning of the string is stored indirectly through decpt . Thus buf == "314" and *decpt == 1 corresponds to the numerical value 3.14, while buf == "314" and *decpt == -1 corresponds to the numerical value .0314. If the sign of the result is negative, the word pointed to by sign is nonzero; otherwise it is zero. The least significant digit is rounded.
The fconvert() function works much like econvert() , except that the correct digit has been rounded as if for sprintf(%w.nf) output with n =ndigit digits to the right of the decimal point. ndigit can be negative to indicate rounding to the left of the decimal point. The return value is a pointer to buf . buf should contain at least 310+max(0,ndigit) characters to accomodate any double-precision value .
The gconvert() function converts the value to a null-terminated ASCII string in buf and returns a pointer to buf . It produces ndigit significant digits in fixed-decimal format, like sprintf(%w.nf) , if possible, and otherwise in floating-decimal format, like sprintf(%w.ne) ; in either case buf is ready for printing, with sign and exponent. The result corresponds to that obtained by
(void) sprintf(buf,``%w.ng'',value) ;
If trailing = 0, trailing zeros and a trailing point are suppressed, as in sprintf(%g) . If trailing != 0, trailing zeros and a trailing point are retained, as in sprintf(%#g) .
The seconvert() , sfconvert() , and sgconvert() functions are single-precision versions of these functions, and are more efficient than the corresponding double-precision versions. A pointer rather than the value itself is passed to avoid C's usual conversion of single-precision arguments to double.
The qeconvert() , qfconvert() , and qgconvert() functions are quadruple-precision versions of these functions. The qfconvert() function can overflow the decimal_record field ds if value is too large. In that case, buf [0] is set to zero.
The ecvt() , fcvt() and gcvt() functions are versions of econvert() , fconvert() , and gconvert() , respectively, that are documented on the ecvt(3C) manual page. They constitute the default implementation of these functions and conform to the X/Open CAE Specification, System Interfaces and Headers, Issue 4, Version 2.
IEEE Infinities and NaNs are treated similarly by these functions. ``NaN'' is returned for NaN, and ``Inf'' or ``Infinity'' for Infinity. The longer form is produced when ndigit >= 8.
See attributes (5) for descriptions of the following attributes:
ATTRIBUTE TYPE | ATTRIBUTE VALUE |
---|---|
MT-Level | MT-Safe |
NAME | SYNOPSIS | DESCRIPTION | USAGE | ATTRIBUTES | SEE ALSO