0,0 → 1,208 |
/* |
FUNCTION |
<<ecvt>>, <<ecvtf>>, <<fcvt>>, <<fcvtf>>---double or float to string |
|
INDEX |
ecvt |
INDEX |
ecvtf |
INDEX |
fcvt |
INDEX |
fcvtf |
|
ANSI_SYNOPSIS |
#include <stdlib.h> |
|
char *ecvt(double <[val]>, int <[chars]>, int *<[decpt]>, int *<[sgn]>); |
char *ecvtf(float <[val]>, int <[chars]>, int *<[decpt]>, int *<[sgn]>); |
|
char *fcvt(double <[val]>, int <[decimals]>, |
int *<[decpt]>, int *<[sgn]>); |
char *fcvtf(float <[val]>, int <[decimals]>, |
int *<[decpt]>, int *<[sgn]>); |
|
TRAD_SYNOPSIS |
#include <stdlib.h> |
|
char *ecvt(<[val]>, <[chars]>, <[decpt]>, <[sgn]>); |
double <[val]>; |
int <[chars]>; |
int *<[decpt]>; |
int *<[sgn]>; |
char *ecvtf(<[val]>, <[chars]>, <[decpt]>, <[sgn]>); |
float <[val]>; |
int <[chars]>; |
int *<[decpt]>; |
int *<[sgn]>; |
|
char *fcvt(<[val]>, <[decimals]>, <[decpt]>, <[sgn]>); |
double <[val]>; |
int <[decimals]>; |
int *<[decpt]>; |
int *<[sgn]>; |
char *fcvtf(<[val]>, <[decimals]>, <[decpt]>, <[sgn]>); |
float <[val]>; |
int <[decimals]>; |
int *<[decpt]>; |
int *<[sgn]>; |
|
DESCRIPTION |
<<ecvt>> and <<fcvt>> produce (null-terminated) strings of digits |
representating the <<double>> number <[val]>. |
<<ecvtf>> and <<fcvtf>> produce the corresponding character |
representations of <<float>> numbers. |
|
(The <<stdlib>> functions <<ecvtbuf>> and <<fcvtbuf>> are reentrant |
versions of <<ecvt>> and <<fcvt>>.) |
|
The only difference between <<ecvt>> and <<fcvt>> is the |
interpretation of the second argument (<[chars]> or <[decimals]>). |
For <<ecvt>>, the second argument <[chars]> specifies the total number |
of characters to write (which is also the number of significant digits |
in the formatted string, since these two functions write only digits). |
For <<fcvt>>, the second argument <[decimals]> specifies the number of |
characters to write after the decimal point; all digits for the integer |
part of <[val]> are always included. |
|
Since <<ecvt>> and <<fcvt>> write only digits in the output string, |
they record the location of the decimal point in <<*<[decpt]>>>, and |
the sign of the number in <<*<[sgn]>>>. After formatting a number, |
<<*<[decpt]>>> contains the number of digits to the left of the |
decimal point. <<*<[sgn]>>> contains <<0>> if the number is positive, |
and <<1>> if it is negative. |
|
RETURNS |
All four functions return a pointer to the new string containing a |
character representation of <[val]>. |
|
PORTABILITY |
None of these functions are ANSI C. |
|
Supporting OS subroutines required: <<close>>, <<fstat>>, <<isatty>>, |
<<lseek>>, <<read>>, <<sbrk>>, <<write>>. |
|
NEWPAGE |
FUNCTION |
<<gcvt>>, <<gcvtf>>---format double or float as string |
|
INDEX |
gcvt |
INDEX |
gcvtf |
|
ANSI_SYNOPSIS |
#include <stdlib.h> |
|
char *gcvt(double <[val]>, int <[precision]>, char *<[buf]>); |
char *gcvtf(float <[val]>, int <[precision]>, char *<[buf]>); |
|
TRAD_SYNOPSIS |
#include <stdlib.h> |
|
char *gcvt(<[val]>, <[precision]>, <[buf]>); |
double <[val]>; |
int <[precision]>; |
char *<[buf]>; |
char *gcvtf(<[val]>, <[precision]>, <[buf]>); |
float <[val]>; |
int <[precision]>; |
char *<[buf]>; |
|
DESCRIPTION |
<<gcvt>> writes a fully formatted number as a null-terminated |
string in the buffer <<*<[buf]>>>. <<gcvtf>> produces corresponding |
character representations of <<float>> numbers. |
|
<<gcvt>> uses the same rules as the <<printf>> format |
`<<%.<[precision]>g>>'---only negative values are signed (with |
`<<->>'), and either exponential or ordinary decimal-fraction format |
is chosen depending on the number of significant digits (specified by |
<[precision]>). |
|
RETURNS |
The result is a pointer to the formatted representation of <[val]> |
(the same as the argument <[buf]>). |
|
PORTABILITY |
Neither function is ANSI C. |
|
Supporting OS subroutines required: <<close>>, <<fstat>>, <<isatty>>, |
<<lseek>>, <<read>>, <<sbrk>>, <<write>>. |
*/ |
|
#define _XOPEN_SOURCE |
#define _XOPEN_SOURCE_EXTENDED |
#include <_ansi.h> |
#include <reent.h> |
#include <stdio.h> |
#include <stdlib.h> |
#include "local.h" |
|
char * |
_DEFUN (fcvt, (d, ndigit, decpt, sign), |
double d _AND |
int ndigit _AND |
int *decpt _AND |
int *sign) |
{ |
return fcvtbuf (d, ndigit, decpt, sign, NULL); |
} |
|
char * |
_DEFUN (fcvtf, (d, ndigit, decpt, sign), |
float d _AND |
int ndigit _AND |
int *decpt _AND |
int *sign) |
{ |
return fcvt ((float) d, ndigit, decpt, sign); |
} |
|
|
char * |
_DEFUN (gcvtf, (d, ndigit, buf), |
float d _AND |
int ndigit _AND |
char *buf) |
{ |
double asd = d; |
return gcvt (asd, ndigit, buf); |
} |
|
|
char * |
_DEFUN (ecvt, (d, ndigit, decpt, sign), |
double d _AND |
int ndigit _AND |
int *decpt _AND |
int *sign) |
{ |
return ecvtbuf (d, ndigit, decpt, sign, NULL); |
} |
|
char * |
_DEFUN (ecvtf, (d, ndigit, decpt, sign), |
float d _AND |
int ndigit _AND |
int *decpt _AND |
int *sign) |
{ |
return ecvt ((double) d, ndigit, decpt, sign); |
} |
|
|
char * |
_DEFUN (gcvt, (d, ndigit, buf), |
double d _AND |
int ndigit _AND |
char *buf) |
{ |
char *tbuf = buf; |
if (d < 0) { |
*buf = '-'; |
buf++; |
ndigit--; |
} |
return (_gcvt (_REENT, d, ndigit, buf, 'g', 0) ? tbuf : 0); |
} |