| .\" Copyright (c) 1990, 1991 The Regents of the University of California. |
| .\" All rights reserved. |
| .\" |
| .\" This code is derived from software contributed to Berkeley by |
| .\" the American National Standards Committee X3, on Information |
| .\" Processing Systems. |
| .\" |
| .\" %%%LICENSE_START(BSD_4_CLAUSE_UCB) |
| .\" Redistribution and use in source and binary forms, with or without |
| .\" modification, are permitted provided that the following conditions |
| .\" are met: |
| .\" 1. Redistributions of source code must retain the above copyright |
| .\" notice, this list of conditions and the following disclaimer. |
| .\" 2. Redistributions in binary form must reproduce the above copyright |
| .\" notice, this list of conditions and the following disclaimer in the |
| .\" documentation and/or other materials provided with the distribution. |
| .\" 3. All advertising materials mentioning features or use of this software |
| .\" must display the following acknowledgement: |
| .\" This product includes software developed by the University of |
| .\" California, Berkeley and its contributors. |
| .\" 4. Neither the name of the University nor the names of its contributors |
| .\" may be used to endorse or promote products derived from this software |
| .\" without specific prior written permission. |
| .\" |
| .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND |
| .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
| .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
| .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE |
| .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
| .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
| .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
| .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
| .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
| .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
| .\" SUCH DAMAGE. |
| .\" %%%LICENSE_END |
| .\" |
| .\" @(#)strtod.3 5.3 (Berkeley) 6/29/91 |
| .\" |
| .\" Modified Sun Aug 21 17:16:22 1994 by Rik Faith (faith@cs.unc.edu) |
| .\" Modified Sat May 04 19:34:31 MET DST 1996 by Michael Haardt |
| .\" (michael@cantor.informatik.rwth-aachen.de) |
| .\" Added strof, strtold, aeb, 2001-06-07 |
| .\" |
| .TH STRTOD 3 2020-06-09 "Linux" "Linux Programmer's Manual" |
| .SH NAME |
| strtod, strtof, strtold \- convert ASCII string to floating-point number |
| .SH SYNOPSIS |
| .B #include <stdlib.h> |
| .PP |
| .BI "double strtod(const char *" nptr ", char **" endptr ); |
| .br |
| .BI "float strtof(const char *" nptr ", char **" endptr ); |
| .br |
| .BI "long double strtold(const char *" nptr ", char **" endptr ); |
| .PP |
| .in -4n |
| Feature Test Macro Requirements for glibc (see |
| .BR feature_test_macros (7)): |
| .in |
| .ad l |
| .PP |
| .BR strtof (), |
| .BR strtold (): |
| .RS 4 |
| _ISOC99_SOURCE || _POSIX_C_SOURCE\ >=\ 200112L |
| .RE |
| .ad |
| .SH DESCRIPTION |
| The |
| .BR strtod (), |
| .BR strtof (), |
| and |
| .BR strtold () |
| functions convert the initial portion of the string pointed to by |
| .I nptr |
| to |
| .IR double , |
| .IR float , |
| and |
| .I long double |
| representation, respectively. |
| .PP |
| The expected form of the (initial portion of the) string is |
| optional leading white space as recognized by |
| .BR isspace (3), |
| an optional plus (\(aq+\(aq) or minus sign (\(aq\-\(aq) and then either |
| (i) a decimal number, or (ii) a hexadecimal number, |
| or (iii) an infinity, or (iv) a NAN (not-a-number). |
| .PP |
| A |
| .I "decimal number" |
| consists of a nonempty sequence of decimal digits |
| possibly containing a radix character (decimal point, locale-dependent, |
| usually \(aq.\(aq), optionally followed by a decimal exponent. |
| A decimal exponent consists of an \(aqE\(aq or \(aqe\(aq, followed by an |
| optional plus or minus sign, followed by a nonempty sequence of |
| decimal digits, and indicates multiplication by a power of 10. |
| .PP |
| A |
| .I "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 \(aqP\(aq or \(aqp\(aq, 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. |
| .PP |
| An |
| .I infinity |
| is either "INF" or "INFINITY", disregarding case. |
| .PP |
| A |
| .I NAN |
| is "NAN" (disregarding case) optionally followed by a string, |
| .IR (n-char-sequence) , |
| where |
| .IR n-char-sequence |
| specifies in an implementation-dependent |
| way the type of NAN (see NOTES). |
| .SH RETURN VALUE |
| These functions return the converted value, if any. |
| .PP |
| If |
| .I endptr |
| is not NULL, |
| a pointer to the character after the last character used in the conversion |
| is stored in the location referenced by |
| .IR endptr . |
| .PP |
| If no conversion is performed, zero is returned and (unless |
| .I endptr |
| is null) the value of |
| .I nptr |
| is stored in the location referenced by |
| .IR endptr . |
| .PP |
| If the correct value would cause overflow, plus or minus |
| .B HUGE_VAL |
| .RB ( HUGE_VALF , |
| .BR HUGE_VALL ) |
| is returned (according to the sign of the value), and |
| .B ERANGE |
| is stored in |
| .IR errno . |
| If the correct value would cause underflow, zero is |
| returned and |
| .B ERANGE |
| is stored in |
| .IR errno . |
| .SH ERRORS |
| .TP |
| .B ERANGE |
| Overflow or underflow occurred. |
| .SH ATTRIBUTES |
| For an explanation of the terms used in this section, see |
| .BR attributes (7). |
| .TS |
| allbox; |
| lbw29 lb lb |
| l l l. |
| Interface Attribute Value |
| T{ |
| .BR strtod (), |
| .BR strtof (), |
| .BR strtold () |
| T} Thread safety MT-Safe locale |
| .TE |
| .SH CONFORMING TO |
| POSIX.1-2001, POSIX.1-2008, C99. |
| .PP |
| .BR strtod () |
| was also described in C89. |
| .SH NOTES |
| Since |
| 0 can legitimately be returned |
| on both success and failure, the calling program should set |
| .I errno |
| to 0 before the call, |
| and then determine if an error occurred by checking whether |
| .I errno |
| has a nonzero value after the call. |
| .PP |
| In the glibc implementation, the |
| .IR 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. |
| .\" From glibc 2.8's stdlib/strtod_l.c: |
| .\" We expect it to be a number which is put in the |
| .\" mantissa of the number. |
| .\" It looks as though at least FreeBSD (according to the manual) does |
| .\" something similar. |
| .\" C11 says: "An implementation may use the n-char sequence to determine |
| .\" extra information to be represented in the NaN's significant." |
| .SH EXAMPLES |
| See the example on the |
| .BR strtol (3) |
| manual page; |
| the use of the functions described in this manual page is similar. |
| .SH SEE ALSO |
| .BR atof (3), |
| .BR atoi (3), |
| .BR atol (3), |
| .BR nan (3), |
| .BR nanf (3), |
| .BR nanl (3), |
| .BR strfromd (3), |
| .BR strtol (3), |
| .BR strtoul (3) |