strtod32() - strtod64() - strtod128() — Convert Character String to Decimal Floating-Point
Format
#define __STDC_WANT_DEC_FP__
#include <stdlib.h>
_Decimal32 strtod32(const char *nptr, char **endptr);
_Decimal64 strtod64(const char *nptr, char **endptr);
_Decimal128 strtod132(const char *nptr, char **endptr);
Language Level
ANSI
Threadsafe
Yes
Locale Sensitive
The behavior of these functions might be affected by the LC_CTYPE and LC_NUMERIC categories of the current locale. For more information, see Understanding CCSIDs and Locales.
Description
The strtod32()
, strtod64()
,
and strtod128()
functions convert a character string
to a single-precision, double-precision, or quad-precision decimal
floating-point value. The parameter nptr points
to a sequence of characters that can be interpreted as a numeric decimal
floating-point value. These functions stop reading the string at the
first character that is not recognized as part of a number. This character
can be the null character at the end of the string. The endptr parameter
is updated to point to this character, provided that endptr is
not a NULL pointer.
The strtod32()
, strtod64()
,
and strtod128()
functions expect nptr to
point to a string with the following form:
The first character that does not fit this form stops the scan. In addition, a sequence of INFINITY or NAN (ignoring case) is allowed.
Return Value
The strtod32()
, strtod64()
,
and strtod128()
functions return the value of the
floating-point number, except when the representation causes an underflow
or overflow. For an overflow, strtod32()
returns HUGE_VAL_D32 or -HUGE_VAL_D32; strtod64()
returns HUGE_VAL_D64 or -HUGE_VAL_D64; strtod128()
returns HUGE_VAL_D128 or -HUGE_VAL_D128.
For an underflow, all functions return +0.E0.
In both the overflow and underflow cases, errno is set to ERANGE. If the string pointed to by nptr does not have the expected form, a value of +0.E0 is returned and the value of nptr is stored in the object pointed to by endptr, provided that endptr is not a NULL pointer.
The strtod32()
, strtod64()
,
and strtod128()
functions do not fail if a character
other than a digit follows an E or e that is read
as an exponent. For example, 100elf is converted to the floating-point
value 100.0.
A character sequence of INFINITY (ignoring case) yields a value of INFINITY. A character value of NAN yields a Quiet Not-A-Number (NaN) value.
If necessary, the return value is rounded using the rounding mode Round to Nearest, Ties to Even.
Example
#define __STDC_WANT_DEC_FP__
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
char *string, *stopstring;
_Decimal32 d32;
_Decimal64 d64;
_Decimal128 d128;
string = "3.1415926This stopped it";
d32 = strtod32(string, &stopstring);
printf("string = %s\n", string);
printf(" strtod32 = %Hf\n", d32);
printf(" Stopped scan at %s\n\n", stopstring);
string = "100ergs";
d32 = strtod32(string, &stopstring);
printf("string = \"%s\"\n", string);
printf(" strtof = %Hf\n", d32);
printf(" Stopped scan at \"%s\"\n\n", stopstring);
string = "3.1415926This stopped it";
d64 = strtod64(string, &stopstring);
printf("string = %s\n", string);
printf(" strtod = %Df\n", d64);
printf(" Stopped scan at %s\n\n", stopstring);
string = "100ergs";
d64 = strtod64(string, &stopstring);
printf("string = \"%s\"\n", string);
printf(" strtod = %Df\n", d64);
printf(" Stopped scan at \"%s\"\n\n", stopstring);
string = "3.1415926This stopped it";
d128 = strtod128(string, &stopstring);
printf("string = %s\n", string);
printf(" strtold = %DDf\n", d128);
printf(" Stopped scan at %s\n\n", stopstring);
string = "100ergs";
d128 = strtod128(string, &stopstring);
printf("string = \"%s\"\n", string);
printf(" strtold = %DDf\n", d128);
printf(" Stopped scan at \"%s\"\n\n", stopstring);
}
/***************** Output should be similar to: *****************
string = 3.1415926This stopped it
strtof = 3.141593
Stopped scan at This stopped it
string = "100ergs"
strtof = 100.000000
Stopped scan at "ergs"
string = 3.1415926This stopped it
strtod= 3.141593
Stopped scan at This stopped it
string = "100ergs"
strtod = 100.000000
Stopped scan at "ergs"
string = 3.1415926This stopped it
strtold = 3.141593
Stopped scan at This stopped it
string = "100ergs"
strtold = 100.000000
Stopped scan at "ergs"
*/
Related Information
- atof() — Convert Character String to Float
- atoi() — Convert Character String to Integer
- atol() – atoll() — Convert Character String to Long or Long Long Integer
- strtod() - strtof() - strtold() — Convert Character String to Double, Float, and Long Double
- strtol() – strtoll() — Convert Character String to Long and Long Long Integer
- strtoul() – strtoull() — Convert Character String to Unsigned Long and Unsigned Long Long Integer
- wcstod() - wcstof() - wcstold() — Convert Wide-Character String to Double, Float, and Long Double
- wcstod32() - wcstod64() - wcstod128() — Convert Wide-Character String to Decimal Floating-Point
- <stdlib.h>