ECONVERT(3C) Standard C Library Functions ECONVERT(3C)
NAME
econvert, fconvert, gconvert, seconvert, sfconvert, sgconvert,
qeconvert, qfconvert, qgconvert - output conversion
SYNOPSIS
#include <floatingpoint.h>
char *econvert(
double value,
int ndigit,
int *decpt,
int *sign,
char *buf);
char *fconvert(
double value,
int ndigit,
int *decpt,
int *sign,
char *buf);
char *gconvert(
double value,
int ndigit,
int trailing,
char *buf);
char *seconvert(
single *value,
int ndigit,
int *decpt,
int *sign,
char *buf);
char *sfconvert(
single *value,
int ndigit,
int *decpt,
int *sign,
char *buf);
char *sgconvert(
single *value,
int ndigit,
int trailing,
char *buf);
char *qeconvert(
quadruple *value,
int ndigit,
int *decpt,
int *sign,
char *buf);
char *qfconvert(
quadruple *value,
int ndigit,
int *decpt,
int *sign char *buf);
char *qgconvert(
quadruple *value,
int ndigit,
int trailing,
char *buf);
DESCRIPTION
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 accommodate 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.
USAGE
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.
ATTRIBUTES
See
attributes(7) for descriptions of the following attributes:
+---------------+-----------------+
|ATTRIBUTE TYPE | ATTRIBUTE VALUE |
+---------------+-----------------+
|MT-Level | MT-Safe |
+---------------+-----------------+
SEE ALSO
ecvt(3C),
sprintf(3C),
attributes(7) April 9, 2016 ECONVERT(3C)