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

# strtod(3)

string to float

## NAME

strtod, strtof, strtold - string to float

## LIBRARY

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

## SYNOPSIS

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

**double strtod(const char \*restrict** *nptr***,**               **char \*\*\_Nullable restrict** *endptr***);** **float strtof(const char \*restrict** *nptr***,**               **char \*\*\_Nullable restrict** *endptr***);** **long double strtold(const char \*restrict** *nptr***,**               **char \*\*\_Nullable restrict** *endptr***);**

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

**strtof**(), **strtold**():

```
    _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
```

## DESCRIPTION

The **strtod**(), **strtof**(), and **strtold**() functions convert the initial portion of the string pointed to by *nptr* to *double*, *float*, and *long double* representation, respectively.

The expected form of the (initial portion of the) string is optional leading white space as recognized by [**isspace**(3)](/isspace/3.md), an optional plus ('+') or minus sign ('-') and then either (i) a decimal number, or (ii) a hexadecimal number, or (iii) an infinity, or (iv) a NAN (not-a-number).

A *decimal number* consists of a nonempty sequence of decimal digits possibly containing a radix character (decimal point, locale-dependent, usually '.'), optionally followed by a decimal exponent. A decimal exponent consists of an 'E' or 'e', followed by an optional plus or minus sign, followed by a nonempty sequence of decimal digits, and indicates multiplication by a power of 10.

A *hexadecimal number* consists of a "0x" or "0X" followed by a nonempty sequence of hexadecimal digits possibly containing a radix character, optionally followed by a binary exponent. A binary exponent consists of a 'P' or 'p', followed by an optional plus or minus sign, followed by a nonempty sequence of decimal digits, and indicates multiplication by a power of 2. At least one of radix character and binary exponent must be present.

An *infinity* is either "INF" or "INFINITY", disregarding case.

A *NAN* is "NAN" (disregarding case) optionally followed by a string, *(n-char-sequence)*, where *n-char-sequence* specifies in an implementation-dependent way the type of NAN (see VERSIONS).

## RETURN VALUE

These functions return the converted value, if any.

If *endptr* is not NULL, a pointer to the character after the last character used in the conversion is stored in the location referenced by *endptr*.

If no conversion is performed, zero is returned and (unless *endptr* is null) the value of *nptr* is stored in the location referenced by *endptr*.

If the correct value would cause overflow, plus or minus **HUGE\_VAL**, **HUGE\_VALF**, or **HUGE\_VALL** is returned (according to the return type and sign of the value), and **ERANGE** is stored in *errno*.

If the correct value would cause underflow, a value with magnitude no larger than **DBL\_MIN**, **FLT\_MIN**, or **LDBL\_MIN** is returned and **ERANGE** is stored in *errno*.

## ERRORS

- **ERANGE**

  Overflow or underflow occurred.

## ATTRIBUTES

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

| | | |
| --- | --- | --- |
| **Interface** | **Attribute** | **Value** |
| **strtod**(), **strtof**(), **strtold**() | Thread safety | MT-Safe locale |

## VERSIONS

In the glibc implementation, the *n-char-sequence* that optionally follows "NAN" is interpreted as an integer number (with an optional '0' or '0x' prefix to select base 8 or 16) that is to be placed in the mantissa component of the returned value.

## STANDARDS

C11, POSIX.1-2008.

## HISTORY

- **strtod**()

  C89, POSIX.1-2001.

- **strtof**() **strtold**()

  C99, POSIX.1-2001.

## CAVEATS

Since 0 can legitimately be returned on both success and failure, the calling program should set *errno* to 0 before the call, and then determine if an error occurred by checking whether *errno* has a nonzero value after the call.

## EXAMPLES

See the example on the [**strtol**(3)](/strtol/3.md) manual page; the use of the functions described in this manual page is similar.

## SEE ALSO

[**atof**(3)](/atof/3.md), [**atoi**(3)](/atoi/3.md), [**atol**(3)](/atol/3.md), [**nan**(3)](/nan/3.md), [**nanf**(3)](/nanf/3.md), [**nanl**(3)](/nanl/3.md), [**strfromd**(3)](/strfromd/3.md), [**strtol**(3)](/strtol/3.md), [**strtoul**(3)](/strtoul/3.md)
