---
name: "ecvt"
section: "3"
platform: "linux"
package: "man-pages"
version: "6.19-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux", "macos"]
url: "https://new.carta.tech/ecvt"
---

# ecvt(3)

convert a floating-point number to a string

## NAME

ecvt, fcvt - convert a floating-point number to a string

## LIBRARY

Standard C library (*libc*, *-lc*)

## SYNOPSIS

```
#include <stdlib.h>
```

**\[\[deprecated\]\] char \*ecvt(double** *number***, int** *ndigits***,**                           **int \*restrict** *decpt***, int \*restrict** *sign***);** **\[\[deprecated\]\] char \*fcvt(double** *number***, int** *ndigits***,**                           **int \*restrict** *decpt***, int \*restrict** *sign***);**

Feature Test Macro Requirements for glibc (see [**feature\_test\_macros**(7)](/feature_test_macros/7.md)):

**ecvt**(), **fcvt**():

```
    Since glibc 2.17
        (_XOPEN_SOURCE >= 500 && ! (_POSIX_C_SOURCE >= 200809L))
            || /* glibc >= 2.20 */ _DEFAULT_SOURCE
            || /* glibc <= 2.19 */ _SVID_SOURCE
    glibc 2.12 to glibc 2.16:
        (_XOPEN_SOURCE >= 500 && ! (_POSIX_C_SOURCE >= 200112L))
            || _SVID_SOURCE
    Before glibc 2.12:
        _SVID_SOURCE || _XOPEN_SOURCE >= 500
```

## DESCRIPTION

The **ecvt**() function converts *number* to a null-terminated string of *ndigits* digits (where *ndigits* is reduced to a system-specific limit determined by the precision of a *double*), and returns a pointer to the string. The high-order digit is nonzero, unless *number* is zero. The low order digit is rounded. The string itself does not contain a decimal point; however, the position of the decimal point relative to the start of the string is stored in *\*decpt*. A negative value for *\*decpt* means that the decimal point is to the left of the start of the string. If the sign of *number* is negative, *\*sign* is set to a nonzero value, otherwise it is set to 0. If *number* is zero, it is unspecified whether *\*decpt* is 0 or 1.

The **fcvt**() function is identical to **ecvt**(), except that *ndigits* specifies the number of digits after the decimal point.

## RETURN VALUE

Both the **ecvt**() and **fcvt**() functions return a pointer to a static string containing the ASCII representation of *number*. The static string is overwritten by each call to **ecvt**() or **fcvt**().

## ATTRIBUTES

For an explanation of the terms used in this section, see [**attributes**(7)](/attributes/7.md).

| | | |
| --- | --- | --- |
| **Interface** | **Attribute** | **Value** |
| **ecvt**() | Thread safety | MT-Unsafe race:ecvt |
| **fcvt**() | Thread safety | MT-Unsafe race:fcvt |

## STANDARDS

None.

## HISTORY

SVr2; marked as LEGACY in POSIX.1-2001. POSIX.1-2008 removes the specifications of **ecvt**() and **fcvt**(), recommending the use of [**sprintf**(3)](/sprintf/3.md) instead (though [**snprintf**(3)](/snprintf/3.md) may be preferable).

## NOTES

Not all locales use a point as the radix character ("decimal point").

## SEE ALSO

[**ecvt\_r**(3)](/ecvt_r/3.md), [**gcvt**(3)](/gcvt/3.md), [**qecvt**(3)](/qecvt/3.md), [**setlocale**(3)](/setlocale/3.md), [**sprintf**(3)](/sprintf/3.md)
