The strtod ("string-to-double") function converts the initial
part of string to a floating-point number, which is returned as a
value of type double .
This function attempts to decompose string as follows:
- A (possibly empty) sequence of whitespace characters. Which characters
are whitespace is determined by the
isspace function
(see Classification of Characters). These are discarded.
- An optional plus or minus sign (
+ or - ).
- A floating point number in decimal or hexadecimal format. The
decimal format is:
- A nonempty sequence of digits optionally containing a decimal-point
character--normally
. , but it depends on the locale
(see General Numeric).
- An optional exponent part, consisting of a character
e or
E , an optional sign, and a sequence of digits.
The hexadecimal format is as follows:
- A 0x or 0X followed by a nonempty sequence of hexadecimal digits
optionally containing a decimal-point character--normally
. , but
it depends on the locale (see General Numeric).
- An optional binary-exponent part, consisting of a character
p or
P , an optional sign, and a sequence of digits.
- Any remaining characters in the string. If tailptr is not a null
pointer, a pointer to this tail of the string is stored in
*tailptr .
If the string is empty, contains only whitespace, or does not contain an
initial substring that has the expected syntax for a floating-point
number, no conversion is performed. In this case, strtod returns
a value of zero and the value returned in *tailptr is the
value of string.
In a locale other than the standard "C" or "POSIX" locales,
this function may recognize additional locale-dependent syntax.
If the string has valid syntax for a floating-point number but the value
is outside the range of a double , strtod will signal
overflow or underflow as described in Math Error Reporting.
strtod recognizes four special input strings. The strings
"inf" and "infinity" are converted to ∞,
or to the largest representable value if the floating-point format
doesn't support infinities. You can prepend a "+" or "-"
to specify the sign. Case is ignored when scanning these strings.
The strings "nan" and "nan(chars...)" are converted
to NaN. Again, case is ignored. If chars... are provided, they
are used in some unspecified fashion to select a particular
representation of NaN (there can be several).
Since zero is a valid result as well as the value returned on error, you
should check for errors in the same way as for strtol , by
examining errno and tailptr.
|