ecvt
Convert double to ASCII string
Interface
#include <stdlib.h>
char | ecvt (double value, int ndigit, int * restrict decpt, int * restrict sign) |
char | fcvt (double value, int ndigit, int * restrict decpt, int * restrict sign) |
char | gcvt (double value, int ndigit, char *buf) |
Description
These functions are provided for compatibility with legacy code. New code should use the function for improved safety and portability. The ecvt, fcvt and gcvt functions convert the double precision floating-point numbervalue
to a NUL-terminated ASCII string.
The ecvt function converts value
to a NUL-terminated string of exactly ndigit
digits and returns a pointer to that string. The result is padded with zeroes from left to right as needed. There are no leading zeroes unless value
itself is 0. The least significant digit is rounded in an implementation-dependent manner. The position of the decimal point relative to the beginning of the string is stored in decpt
. A negative value indicates that the decimal point is located to the left of the returned digits (this occurs when there is no whole number component to value
). If value
is zero, it is unspecified whether the integer pointed to by decpt
will be 0 or 1. The decimal point itself is not included in the returned string. If the sign of the result is negative, the integer pointed to by sign
is non-zero; otherwise, it is 0.
If the converted value is out of range or is not representable, the contents of the returned string are unspecified.
The fcvt function is identical to ecvt with the exception that ndigit
specifies the number of digits after the decimal point (zero-padded as needed).
The gcvt function converts value
to a NULL-terminated string similar to the reference:printf format specifier and stores the result in buf
. It produces ndigit
significant digits similar to the reference:printf format specifier where possible. If ndigit
does allow sufficient precision, the result is stored in exponential notation similar to the reference:printf format specifier. If value
is less than zero, buf
will be prefixed with a minus sign. A decimal point is included in the returned string if value
is not a whole number. Unlike the ecvt and fcvt functions, buf
is not zero-padded.Example 1
#include <stdio.h> #include <stdlib.h> int main() { int decimal, sign; char *buffer = ecvt(3.1415926535, 11, &decimal, &sign); printf("pi = %c.%s\n", buffer[0], buffer + 1); return 0; }
Output:pi = 3.1415926535
Return Values
The ecvt, fcvt and gcvt functions return a NUL-terminated string representation ofvalue
.